--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+NTS_VERSION=0.8.1
+
+# Network settings
+HOST_IP=192.168.10.253
+
+# traefik network
+HTTP_DOMAIN=smo.o-ran-sc.org
+
+# repository
+REPO_ONAP=nexus3.onap.org:10001/
+REPO_ADAPTER=""
+
+# Networks
+
+COMMON_NETWORK=172.60
+COMMON_NETWORK_NAME=common-network
+COMMON_NETWORK_SUBNET=${COMMON_NETWORK}.0.0/16
+COMMON_NETWORK_GATEWAY=${COMMON_NETWORK}.0.1
+
+# Base
+SDNR_HOST=sdnr
+SDNR_NETCONF_CALLHOME_PORT=4334
+NETCONF_CALLHOME_ENABLED=true
+
+## Open Network management
+
+# sdnr
+SDNR_IMAGE=${REPO_ONAP}onap/sdnc-image:2.7.0-STAGING-latest
+SDNR_WEBSOCKET_PORT=8182
+SDNR_NETCONF_CALLHOME_ENABLED=${NETCONF_CALLHOME_ENABLED}
+ODL_CERT_DIR=/opt/opendaylight/current/certs
+ODL_ADMIN_USERNAME=admin
+ODL_ADMIN_PASSWORD=admin
+SDNR_IP_COMMON_NETWORK=${COMMON_NETWORK}.0.71
+
+# sdnrdb
+SDNRDBDB_IMAGE=mariadb:11.1.2
+SDNRDB_IP_COMMON_NETWORK=${COMMON_NETWORK}.0.81
+
+# sdnr-web
+SDNC_WEB_IMAGE=${REPO_ONAP}onap/sdnc-web-image:2.7.0-STAGING-latest
+SDNC_WEB_PORT=8282
+SDNRPORT=8181
+SDNC_WEB_IP_COMMON_NETWORK=${COMMON_NETWORK}.0.91
+
+# pynts
+PYNTS_IP_COMMON_NETWORK=${COMMON_NETWORK}.0.99
+
+MICRO_K8S_VERSION=1.30
+CNI_PLUGIN_VERSION="v1.5.1"
+PYNTS_IP_O_RU=${COMMON_NETWORK}.0.99
+PYNTS_IP_O_RU_2=${COMMON_NETWORK}.0.98
+PYNTS_IP_O_DU=${COMMON_NETWORK}.0.100
--- /dev/null
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Apps
+*.pid
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+pip-wheel-metadata/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+.python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# templates
+.github/
+.idea/
+
+# docker compose
+
+integration/.env*
+
+# VS Code
+.vscode/
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+include .env
+export
+
+.PHONY: build-all
+build-all: build-o-ru-mplane build-o-du-o1
+
+.PHONY: build-o-ru-mplane
+build-o-ru-mplane: build-image-base
+ docker build -f o-ru-mplane/Dockerfile -t pynts-o-ru-mplane:${NTS_VERSION} -t pynts-o-ru-mplane:latest .
+
+.PHONY: build-o-du-o1
+build-o-du-o1: build-image-base
+ docker build -f o-du-o1/Dockerfile -t pynts-o-du-o1:${NTS_VERSION} -t pynts-o-du-o1:latest .
+
+.PHONY: build-image-base
+build-image-base:
+ docker build -f base/Dockerfile -t pynts-base:${NTS_VERSION} -t pynts-base:latest .
+
+.PHONY: clean-image-base
+clean-image-base:
+ docker rmi pynts-base:latest || true
--- /dev/null
+# PyNTS
+
+PyNTS is a network topology simulator. Its focus is on the OpenFronthaul M-Plane and O1 management interfaces. It is written in Python as a modular application, which dynamically loads modules and extensions as it finds them available. The main code resides within the `application.py` file, and the methods here are responsible for instantiating and configuring logging, argument parsing and loading everything else.
+
+## Core
+
+The core of PyNTS handles instancing and starting of all the features and functionality.
+
+The core module is the default loaded module by the application. It is the first to instantiate all the necessary modules and to start some features. The steps executed by the core module are as follows:
+- instantiates any other base functionality of PyNTS (Config, REST, NETCONF)
+- loading IetfSystemFeature
+- loading NetconfAcmFeature
+- loading CertificateExpirationNotifierFeature
+- attempting to populate netconf data
+- attempting VES pnfRegistration
+- starting VES Heartbeat
+- starting FaultManagement
+- starting PerformanceManagement
+
+
+### NETCONF Server
+
+The NETCONF Server class handles the configuration of the NETCONF server (netopeer2-server).
+
+<!-- ### REST API
+
+REST API is used to control and check specific aspects of PyNTS, allowing the dynamic registration of REST endpoints.
+
+The REST API endpoints are described by the extensions, modules and features which register such endpoints. -->
+
+## Config
+
+Configuring PyNTS is done through one or more of the following:
+- environment variables (core)
+- JSON configurations (for modules/features)
+<!-- - REST API endpoints (for modules/features which support) -->
+
+### Environment variables
+You can find more information in the [Environment variables](environment-variables.md) page.
+
+## Features
+
+### Fault management
+You can find more information in the [Fault Management](fault-management.md) page.
+
+### Performance management
+You can find more information in the [Performance Management](performance-management.md) page.
+
+## Ports
+
+- NETCONF SSH: depending on the configuration in ietf-netconf-server-running.json
+- NETCONF TLS: depending on the configuration in ietf-netconf-server-running.json
+- FTP: 21 (pmData /ftp)
+- SFTP: 22 (pmData /ftp)
+
+## Usage
+
+For building the docker images to be used by the simulator, one can issue the command `make build-all` from the root of the repository.
+
+This will result in building two docker images: one for the simulated O-RU (exposing OpenFronthaul M-Plane interface), and one for the simulated O-DU (exposing O1 interface).
+
+The configuration of the NETCONF Server itself (whether it's SSH or TLS, whether it's normal connection or CallHome, the ports for listening etc.) is done through dynamically loading, at run-time, the configuration of the ietf-netconf-server model. There are some exmples for different cases.
+
+### TLS NETCONF Configuration
+
+Please note that `local-address` and `local-port` identify the local IP address and port where the NETCONF Server will listen for connections.
+
+A `local-address` can be set to `::` for listening on all IP addresses, including **IPv6**.
+
+```json
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "idle-timeout": 0,
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-endpoint",
+ "tls": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 6513
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-smo"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:CB:E3:29:E2:65:04:A8:DF:B3:63:E7:E4:1A:06:81:64:C6:DA:37",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+}
+```
+
+### SSH NETCONF Configuration
+
+Please note that `local-address` and `local-port` identify the local IP address and port where the NETCONF Server will listen for connections.
+
+A `local-address` can be set to `::` for listening on all IP addresses, including **IPv6**.
+```json
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "ssh-endpoint-830",
+ "ssh": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 830
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+}
+```
+
+### NETCONF Call-Home via SSH
+
+Please note that `remote-address` and `remote-port` identify the Call-Home endpoint (e.g. the SMO or the O-DU which listen for Call-Home connections).
+
+```json
+{
+ "ietf-netconf-server:netconf-server": {
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-client",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "default-ssh-callhome",
+ "ssh": {
+ "tcp-client-parameters": {
+ "remote-address": "192.168.10.253",
+ "remote-port": 4334
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
+```
+
+### NETCONF Call-Home via TLS
+
+Please note that `remote-address` and `remote-port` identify the Call-Home endpoint (e.g. the SMO or the O-DU which listen for Call-Home connections).
+
+```json
+{
+ "ietf-netconf-server:netconf-server": {
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-client",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "172.60.0.71",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:e9:38:1f:f6:8b:62:de:0a:0b:c5:03:81:a8:03:49:a0:00:7f:8b:f3",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": "netconf"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
+```
+
+## Loading data
+
+Data can be loaded in the NETCONF datastores at boot-time. By creating files having the name "[yang-module-name]-[datastore].[xml|json]", and placing them in /data folder (/data can be mounted in the docker container and all files present there will be considered for loading). The files can be in either `xml` or `json` format. The accepted datastores are `running` or `operational`.
+
+## Starting the simulator
+
+There are example docker-compose files for starting a simulated O-RU (actually 2 of them, one in hybrid mode, one in hierarchical mode) and another one for starting an O-DU. They can be started by simply doing `docker compose -f docker-compose-o-du-o1.yaml up -d` or `docker compose -f docker-compose-o-ru-mplane.yaml up -d`.
--- /dev/null
+# syntax=docker/dockerfile:1
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+FROM ubuntu:22.04
+
+RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y \
+ # basic tools
+ tzdata build-essential git cmake pkg-config \
+ # libyang dependencies
+ libpcre2-dev \
+ # libnetconf dependencies
+ libssh-dev libssl-dev libcurl4-openssl-dev libpam-dev \
+ # python bindings dependencies
+ python3-dev python3-cffi python3-pip \
+ # supervisor
+ supervisor psmisc \
+ # unzip
+ unzip \
+ # ftpd related
+ openssl openssh-client openssh-server \
+ vsftpd \
+ && \
+ apt-get clean && \
+ rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
+
+# add netconf user and configure access
+RUN \
+ adduser --system netconf && \
+ groupadd -f netconf && \
+ echo "netconf:netconf!" | chpasswd
+
+# FTP and SFTP configuration
+RUN \
+ mkdir /ftp && \
+ chown -R netconf /ftp && \
+ mkdir /var/run/vsftpd && \
+ mkdir /var/run/vsftpd/empty && \
+ mkdir /run/sshd && \
+ echo "Match User netconf\n ChrootDirectory /\n X11Forwarding no\n AllowTcpForwarding no\n ForceCommand internal-sftp -d /ftp" >> /etc/ssh/sshd_config
+
+COPY ./base/docker/conf/vsftpd.conf /etc/vsftpd.conf
+COPY ./base/docker/conf/vsftpd.userlist /etc/vsftpd.userlist
+
+# use /opt/dev as working directory
+RUN mkdir /opt/dev
+WORKDIR /opt/dev
+
+# get required build libs from git
+RUN \
+ git config --global advice.detachedHead false && \
+ git clone --single-branch --branch v3.4.2 https://github.com/CESNET/libyang.git && \
+ # git clone --single-branch --branch v3.0.0 https://github.com/CESNET/libyang-python.git && \
+ git clone --single-branch --branch master https://github.com/CESNET/libyang-python.git && \
+ git clone --single-branch --branch v2.11.7 https://github.com/sysrepo/sysrepo.git && \
+ git clone --single-branch --branch v1.7.3 https://github.com/sysrepo/sysrepo-python.git && \
+ git clone --single-branch --branch v3.5.1 https://github.com/CESNET/libnetconf2.git && \
+ git clone --single-branch --branch v2.2.31 https://github.com/CESNET/netopeer2.git
+
+# build and install libyang
+RUN \
+ cd libyang && \
+ mkdir build && cd build && \
+ cmake -DCMAKE_BUILD_TYPE:String="Debug" -DENABLE_BUILD_TESTS=OFF .. && \
+ make -j4 && \
+ make install && \
+ ldconfig
+
+# install libyang python bindings
+RUN \
+ cd libyang-python && \
+ git reset --hard 012d144 && \
+ pip3 install .
+
+# build and install sysrepo
+COPY ./base/docker/conf/pynts-sysrepo.patch /opt/dev/sysrepo/pynts-sysrepo.patch
+RUN \
+ cd sysrepo && \
+ git apply pynts-sysrepo.patch && \
+ mkdir build && cd build && \
+ cmake -DCMAKE_BUILD_TYPE:String="Debug" -DENABLE_TESTS=OFF -DNACM_RECOVERY_USER=root .. && \
+ make -j4 && \
+ make install && \
+ ldconfig
+
+# install sysrepo python bindings
+COPY ./base/docker/conf/pynts-sysrepo-python.patch /opt/dev/sysrepo-python/pynts-sysrepo-python.patch
+RUN \
+ cd sysrepo-python && \
+ git apply pynts-sysrepo-python.patch && \
+ pip3 install .
+
+# build and install libnetconf2
+RUN \
+ cd libnetconf2 && \
+ mkdir build && cd build && \
+ cmake -DCMAKE_BUILD_TYPE:String="Debug" -DENABLE_BUILD_TESTS=OFF .. && \
+ make -j4 && \
+ make install && \
+ ldconfig
+
+# build and install netopeer2
+COPY ./base/docker/conf/pynts-netopeer2.patch /opt/dev/netopeer2/pynts-netopeer2.patch
+RUN \
+ cd netopeer2 && \
+ git apply pynts-netopeer2.patch && \
+ mkdir build && cd build && \
+ cmake -DCMAKE_BUILD_TYPE:String="Debug" -DSYSREPO_SETUP=OFF .. && \
+ make -j4 && \
+ make install
+
+ENV NP2_MODULE_PERMS=600
+ENV NP2_MODULE_DIR=/usr/local/share/yang/modules/netopeer2/
+ENV LN2_MODULE_DIR=/usr/local/share/yang/modules/libnetconf2/
+ENV PYNTS_MODULE_DIR=/usr/local/share/yang/modules/pynts/
+
+COPY ./base/docker/conf/ODU_rootCA.key /home/oranuser/.ssh/ODU_rootCA.key
+COPY ./base/docker/conf/ODU_rootCA.crt /home/oranuser/.ssh/ODU_rootCA.crt
+COPY ./base/docker/conf/ODU_client.key /home/oranuser/.ssh/ODU_client.key
+COPY ./base/docker/conf/ODU_client.crt /home/oranuser/.ssh/ODU_client.crt
+COPY ./base/docker/conf/SMO_rootCA.key /home/oranuser/.ssh/SMO_rootCA.key
+COPY ./base/docker/conf/SMO_rootCA.crt /home/oranuser/.ssh/SMO_rootCA.crt
+COPY ./base/docker/conf/end_odu_openssl.cnf /home/oranuser/.ssh/end_odu_openssl.cnf
+
+COPY ./base/docker/yang /usr/local/share/yang/modules/pynts/
+COPY ./base/docker/scripts /opt/dev/scripts
+RUN \
+ /opt/dev/scripts/setup.sh
+
+COPY ./base/docker/conf/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
+
+# copy base code
+COPY ./base/src /app
+
+# install requirements
+RUN pip install -r /app/requirements.txt
+
+ENV NETWORK_FUNCTION_TYPE="undefined"
+ENV NETCONF_USERNAME="netconf"
+ENV NETCONF_PASSWORD="netconf!"
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIID4DCCAsigAwIBAgIUMh4dsYL7y1absNHUXtAnRaIq7rEwDQYJKoZIhvcNAQEL
+BQAwbTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxEzARBgNVBAcM
+Ck5ldyBKZXJzZXkxEDAOBgNVBAoMB01lbGFjb24xCzAJBgNVBAsMAjVHMRUwEwYD
+VQQDDAxSb290IE8tRFUgQ0EwHhcNMjQwOTI3MTExNjQzWhcNMzQwOTI1MTExNjQz
+WjBrMQswCQYDVQQGEwJVUzETMBEGA1UECAwKTmV3IEplcnNleTETMBEGA1UEBwwK
+TmV3IEplcnNleTEQMA4GA1UECgwHTWVsYWNvbjELMAkGA1UECwwCNUcxEzARBgNV
+BAMMCmh5YnJpZC1vZHUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8
+XgcBQVLJ2aeZK4NsugtzcBIMXVxr01CtHANiEF7np1qFv9wcLHI8MMIPII1gprN6
+7GtFxvNEPLb6q8Rngh8ovC0DEdTKycR17GsXHimPALAa0BWDmgk2AM5BAwbt0Cx3
+4Km0sHSA2uHevNJLtMEj0EH0Ol+sKO/Leofz1nHqnK/6azFzBOtatzdixzjevvxd
+vEG2MtRUfWBZ1xDNdXbLcFJ1eoyM309a0UBrhRhdeiq7/5APPuHXm5AcKbmzOtUv
+sB7Sdh/KMfkyhtquwuq6BWUpgTver2uJn1WeIp2ZH17phyxOsHbKXWOxotn2ioVD
+R9siAbHlU6sbf9ZNdrsHAgMBAAGjejB4MA4GA1UdDwEB/wQEAwIBhjAmBgNVHREE
+HzAdgRtjbGllbnQuaHlicmlkLW9kdUBsb2NhbGhvc3QwHQYDVR0OBBYEFDLA//6L
+0J2OD3zcTzNrcuP0deHQMB8GA1UdIwQYMBaAFMrKdkkdowUjLHLB3BNQidevXAnu
+MA0GCSqGSIb3DQEBCwUAA4IBAQBbc33MgH7GDKKzYefJ11IMql/yzdCbHg8lNmqm
+OeKs+WxqjvnqhQFtbBWVlMddMgbIxAMJPwJO96zwA7elsXhxcebQQUXP6Bne5yvl
+ZMnvIOpL2mDBQXHnv/B4HcJFb/R3UB+QuFH4Z/fLIjlz0If+uOg+7PBIeYmAWiqQ
+jBMs0WzQyRTCtNDjRnbeqiv4I9IH/f5ltoS1xWCTotuqTH/1ceTnN1iOzUxltO61
+kD6uk/8OgPICwQ3+JsuA2HwgzKsenOtv3LCVzv4jCcxl6XSIJRJNQYiotIOanyfk
+yUfAMFZ4aBlXdLK0TW32DytO/Tt34EkH7Nf0w1KpHxQLMHI/
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8XgcBQVLJ2aeZ
+K4NsugtzcBIMXVxr01CtHANiEF7np1qFv9wcLHI8MMIPII1gprN67GtFxvNEPLb6
+q8Rngh8ovC0DEdTKycR17GsXHimPALAa0BWDmgk2AM5BAwbt0Cx34Km0sHSA2uHe
+vNJLtMEj0EH0Ol+sKO/Leofz1nHqnK/6azFzBOtatzdixzjevvxdvEG2MtRUfWBZ
+1xDNdXbLcFJ1eoyM309a0UBrhRhdeiq7/5APPuHXm5AcKbmzOtUvsB7Sdh/KMfky
+htquwuq6BWUpgTver2uJn1WeIp2ZH17phyxOsHbKXWOxotn2ioVDR9siAbHlU6sb
+f9ZNdrsHAgMBAAECggEAC1T1kB8q6NbxAzQf77fwtzaEKQqqZBfOIBJLjc6B6k1V
+Ri74zrHjaWv34+SuCXHd4d48XqVAvnEpaakdsEOetkE9ZmFGb0pC4sk6cNiXej5G
+jRMv+1iWVBGP8IJ+TzfMnqWWvNA37tLvVaP/jrhgCiFRAAbm+VQ5IM4AeCw4pcfb
+tJoziGHPfNP+a+DuUTHhZPucVbGnP0xc3wAbaF2dwU/ielv3E3xs5dArvbsveKrP
+8xmKxzYA0GYFlUktepz56AuZdqqBf+7mvNyl/ncEEQdFeXruq3aCfE6uNolhtA32
+IFtANpL91H9S/m+7saBnpuM7OYwmRCmeFo5ImahrWQKBgQDZpoNyj+B0pvFYkytl
+9stDH2FP1Hmz8auqJSN97iVFgcy7DYPQRyCOa5GvOYabYqN38Y9myGtpELFDhkfM
+jZ/Lt9I/ys9Av7jjzhQVN3I2IkqnGxplLCu5TWUD16Rx9Vms1h9K2vyHIKb6ypMX
+65GISgtmKk+WwG7brG+8brp+/QKBgQDdjqYJ9mRTd76lj/qImlvV/cLDW5nR+kCe
+AG7MJoC9nCAyNq2EHbpC7OtXNGAX7foL0WSShWiUWNCJEaUgZELdZ3VCUb2wxJs4
+V06ZyR2bzIKR2pXxg7Mwz+ksQbUtldi/cbAtfEYIStL/8w19aZ+tCVwcPwS5bXFv
+rJgVgqx7UwKBgQCpEt79uaKlO6I0Km8GEEcp51CS0P2RuWSfEaaWhs7RRdmiXQdO
+XlJ+EDXlpoxYXLGb1TyOnZZC0cLCL6fK0SGXAT8EaynApK6d2FJlgOLqBo1zbmx8
+t2ln0yVrbLLEC9ITn2pDngWZetX78C1/4XD2LH7aaHfXJbl4UGWkPWgGiQKBgHbk
+0wNrnqEQFFXCct6VfwzR1Y+Ce4Qr+DsR3mNdkh6uRrTLlMfeMBM0EoLEj4Cn61Qm
+NQNP5jQdiSLVPjiotR0dJNbHCLVwfB968qoiO+pckAD3PRnS4/kgyW8/f5uL2zm5
+J6LxGp/ej2ZcpvOTF+YCrNRXmRBsw7/67c41RpwTAoGBAJRppvX/vXNgl/+Q2OoF
+71Q7uY3gjmnAOrnxmI4JF1w9aQFtuSeeg8PTV4NiatcHXm5GSAltXmigR4WAZL46
+ahKit+yFo5avadpHX0J/dvKf2YZm3hlNW5Xa0PZU26OJeyyrEVtZUFbb5LS1Y+ww
+GXBYwlNMT7ZaSw287NOb+M2O
+-----END PRIVATE KEY-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIID4jCCAsqgAwIBAgIUaYAr3oUnwHAxx17UaITAZfx62QwwDQYJKoZIhvcNAQEL
+BQAwbTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxEzARBgNVBAcM
+Ck5ldyBKZXJzZXkxEDAOBgNVBAoMB01lbGFjb24xCzAJBgNVBAsMAjVHMRUwEwYD
+VQQDDAxSb290IE8tRFUgQ0EwHhcNMjQwOTI3MTExNjE5WhcNMzQwOTI1MTExNjE5
+WjBtMQswCQYDVQQGEwJVUzETMBEGA1UECAwKTmV3IEplcnNleTETMBEGA1UEBwwK
+TmV3IEplcnNleTEQMA4GA1UECgwHTWVsYWNvbjELMAkGA1UECwwCNUcxFTATBgNV
+BAMMDFJvb3QgTy1EVSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ALirrFp4trHhvIFHncKE5jK8waQalIGcWSXhATGeygB0Gx1uyi9Nar6oiw93rh6t
+iNcuKWGBe+FpzI7BEMpN6pu0gtazlbSEgzU7tXq4h6V5GjQMjidnq/ttv4SxMqic
++zV7w6azAJN5mpTOlsz4NuQsRCcRHTU3bVZw3eT0HUZeFTWysKPZ9rXflG8oGt58
+gQDojeaVdB4BQkQmzEm6q9zpan8cC/5fAP885C4soR7duHjfuWHaEtg3qTDVip6+
+JkxjMq+GVc5wolE5vzUlxSMKIs4AX6fdiq/QjsdU7Xboo469A0uweApaO+btC0op
+8nD/H6cVqtJazQRC0REmym0CAwEAAaN6MHgwFQYDVR0RBA4wDIEKaHlicmlkLW9k
+dTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTK
+ynZJHaMFIyxywdwTUInXr1wJ7jAdBgNVHQ4EFgQUysp2SR2jBSMscsHcE1CJ169c
+Ce4wDQYJKoZIhvcNAQELBQADggEBABr+3a3W3Cz4I937bLzzZhHSWFr/C44cUTO0
+tEidtsg7zdfQVXC2uq6SaP8Ufvq8ocIci5RiBlyBVssTelfzM4aLBoVaJp4JP/RS
+D9v/yMc9U+BHy/U8Jnv8E6wv1Rc+ATygIt32ZrtN649btXhlDiG7FtbP9gowwpq+
+NQxPE3tt1jYk9XBNWa06sDNxt/ARU0p74YYrE30achIVq/WIS0Xepma3ycbnIjRh
+2aX74jZBVVDrNnGkxFDIsONv+H2PGcWJhe2DM1gvpbJPz4L/dc8Gnuuoaz7AHIvk
+6R3bvcPuHuVIgWMHdWyY/LeOWa6kk+tfxn5AfwdfgsP2Ba5rApI=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4q6xaeLax4byB
+R53ChOYyvMGkGpSBnFkl4QExnsoAdBsdbsovTWq+qIsPd64erYjXLilhgXvhacyO
+wRDKTeqbtILWs5W0hIM1O7V6uIeleRo0DI4nZ6v7bb+EsTKonPs1e8OmswCTeZqU
+zpbM+DbkLEQnER01N21WcN3k9B1GXhU1srCj2fa135RvKBrefIEA6I3mlXQeAUJE
+JsxJuqvc6Wp/HAv+XwD/POQuLKEe3bh437lh2hLYN6kw1YqeviZMYzKvhlXOcKJR
+Ob81JcUjCiLOAF+n3Yqv0I7HVO126KOOvQNLsHgKWjvm7QtKKfJw/x+nFarSWs0E
+QtERJsptAgMBAAECggEAK7J3nIrO1CWRmNes5U/UNrJCccXWWRr5X0SwJyEnNFdE
+6UCDeBDuDsJL8XOE0H6IkD48jXV5rjt+K1NU2UH5nzFl+k7RQD9Q2sJPrYPHmSig
+QiusYXefEuYDuO7DCXHn4V5xS9s0ajEOmmKN/V9IgdJVqBbdHfAJH7iiUOBQowsO
+NM7XK2IOMhliDF/k6L8QCDWgfYQZe5VX4ogNp9Tst3+yC47OspzkBs+xMvgz0zbj
+vlZWY74W58XIfpY7da2heB+XZcd+/oSDP03zae0LwtJzk/QTpsP2LTywnnauHXF6
+GGFyI8Rbk5fhxbCtl8ZxZaymVEQ+BZ1Z5iyTwqajUwKBgQDey10EK0jKUZ89RT+q
+2naYtj2nUImTo1zqZUpS1RuUnetZUBbpMuhIWByOZQuzngqVKaxhWB/9OOvVUkPB
+UEONUgZqmgQJSaZquYpB4hwrRU2SOdatH6WCcA59EoO8o375j8+R1NNiL8r4RL9/
+RC9e8VeYkiLpTJYXYFHPxYoz9wKBgQDUMbYB4WG+hOUW3Di6fWhsYqSdt4HFEHTK
+xO+rmdZ1U8T2+Qp2vXBKAPGIywuR0YE3i2vBuMeRtT2cFRE+tKeQNTzav6TFiieq
+VdskSA9s4jcMbsLZlbAKAxv/6HMeJzCnDSxhUvd56RAN/1Nvza96UERa3bxQynHB
+gmOW0oSTuwKBgQDYSacQcBDnUNv9eGe5rwJpeKpb7uTQrkx6xUClL3vqCHE9MHI9
+jA1Shi+a0V/NzQTLEDzn98x+YS8Z1hYu6oPaAyJ1hPWcKqLjgyJEmYTtQQdwiLPv
+OATOn4iBRWMc08Bl+IXzNiDMdkdeRCeAHqq6SiPW2zAHOzGOmhRyV3y2uwKBgGnY
+njST64Dwo6Himj2UXulpzzmJFydozQl0cSVFKK//6ElV8v1GA+Q2UkVtG0lSm0VM
+u6S3en1ZTfE0pRSFYuxRUhi/7f5Hqv+Rsi2H8IHc2Z7PBU0qGNT1thrSJdJNtDww
+Gwo1K5NZSZPh4AnuLPEzZtV4s/4M7e+cDfdm7ZEPAoGAAU4Mj+xd66vmwUHYfMKe
+VqT3DOaFOwTWWgaJ3t2wE91iZZs/3r/GiUHggwsYucvziocSloB9AofUjXBW0uh/
+bvI+3Xa/hAqrxKTiOE6qrI+Usy4MUDfy76S99EBCeAs+1lhIlF+VZJhWt0TuwXxW
+ZI7gQndAnEjymUt6OEdxSTk=
+-----END PRIVATE KEY-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIUTkv1DE1nHhyCl5KSh7fe90G1VfkwDQYJKoZIhvcNAQEL
+BQAwbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxEzARBgNVBAcM
+Ck5ldyBKZXJzZXkxEDAOBgNVBAoMB01lbGFjb24xCzAJBgNVBAsMAjVHMRQwEgYD
+VQQDDAtSb290IFNNTyBDQTAeFw0yNDA5MjQxODIxNDZaFw0zNDA5MjIxODIxNDZa
+MGQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApOZXcgSmVyc2V5MRMwEQYDVQQHDApO
+ZXcgSmVyc2V5MRAwDgYDVQQKDAdNZWxhY29uMQswCQYDVQQLDAI1RzEMMAoGA1UE
+AwwDU01PMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvetzKy0ezHUa
+0784M7rdKJzx980gKSuFcoV2NtDGVPOZTmnLrEYoa9AlRtFkj/IumUxNN2UOZPlc
+9SHjUjsL6sNQ72kQnxfzrosDtC43rIonvJB+OAHK5cAaCX4YLy8CdCbN7kV4+jbR
+/KHbwbmeJqgnvQ4y2lvWbpk9uc2qXdLMSum+5SxdwTY5X//DEVd6CNUEXWaZDzzl
+2C/M0gmQQcLeAEoomBigfd3iadJd0Ty7itc3Tm5yVSNbDKvjNir7zgQh2d5qFlZB
+CktV0eya+WnosAFH8IiHAVzSK3i2ydQVSSgGkH97SQIc2XUxDV/IEZAsJcXppa1n
+uRZgVLgqFwIDAQABo3MwcTAOBgNVHQ8BAf8EBAMCAYYwHwYDVR0RBBgwFoEUY2xp
+ZW50LnNtb0Bsb2NhbGhvc3QwHQYDVR0OBBYEFDljZ1Sx1uQwOjmseaH/hYdyazB+
+MB8GA1UdIwQYMBaAFLDCgaO0SEKqIa8BMcrQ1SCUE+yqMA0GCSqGSIb3DQEBCwUA
+A4IBAQAbVzbKAX62/b3TK26ELipCDovmPwDfvMYtSq1Bet4lwz3rBTJ8wEzxdCwk
+nn6XLX2qq1yXYy+bBB2jcncWxh1DWX0G/lp9w35QIw9G6V4y3u0RY1Qmxm8zMVhG
+gZQMsBv2JXklebj6V2mhbtAfJR9ONuA9CQ6vCBYcyubAc89bZuH1sGbxBijm+Dpc
+PLruFxo2GQBVRM4ipJKtPIJHEQtMiSndWP0IruQYKx0ChpEjNpsK9c5ivVzG6LKc
+wD7rxS3i+U2Q6I30igSJoJBbrN8a8gOwiHEtfbiQnbBhDIknjNMiA5koOaNTgB5o
+8HyjEpC09buEpJ37dxToDse+EzOc
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC963MrLR7MdRrT
+vzgzut0onPH3zSApK4VyhXY20MZU85lOacusRihr0CVG0WSP8i6ZTE03ZQ5k+Vz1
+IeNSOwvqw1DvaRCfF/OuiwO0Ljesiie8kH44AcrlwBoJfhgvLwJ0Js3uRXj6NtH8
+odvBuZ4mqCe9DjLaW9ZumT25zapd0sxK6b7lLF3BNjlf/8MRV3oI1QRdZpkPPOXY
+L8zSCZBBwt4ASiiYGKB93eJp0l3RPLuK1zdObnJVI1sMq+M2KvvOBCHZ3moWVkEK
+S1XR7Jr5aeiwAUfwiIcBXNIreLbJ1BVJKAaQf3tJAhzZdTENX8gRkCwlxemlrWe5
+FmBUuCoXAgMBAAECggEAO8s439OdWj7WWutdzP+cqLA9CEknQn8GzUcSsHBruQxW
+7Janfs455LPMQK8lS6KypCYfO30QGp9d8nmgYd/gQSIMRcwc5RH78SyoVl6kvahj
+mV0euBBsaohgSjPOdnCFA7/B3y41SAXhd/oXv7bqgX44wK+LOC9o5DpP8kM7y7zK
+6mBtKLROXdLVAwaTMYSQNvNnyfua6Rnb2gD5bWiybjYqGiKCWI7HcM82fWZtfMvu
+NWzJpjrDeAeCDPoLZkYsIJL1R7eW1tKf4Khu8KWnl/rbg92PpdPXXxeb+TqBHy/J
+YJXwulfsXL8SZC1zVhWXAl+XWZyHEPxb6IdHG2UgOQKBgQDp3h8fZ1gQD0oI7QnQ
+wqhrkkzTWlUV/Jxm1D5SHhUMMiUExvcmGqp4K4yiBFhXtTdNSQIAgVLErfX+K1Ef
+00kdHD6Sv+UBdJWfrKNImQXEmyuGlaDxvxaGQCAgsUUwVQjX3Gpt/XLiy53GwJRO
+2QMjpFv/FP04VXq6a5jNvPuF7wKBgQDP5JuhixMAXeGbratrzUTy6b+JQIPzCYkU
+GYcFlqRcxOaBm63vSg66oU4A3wEbR3vmIRc/26zOjYN6lsy18g1VNyu57zo/Pj+r
+XlwbbWNs8bIEP1knIn65T1W0ecRts64R/UpsjplzKtyAr/XmoicEnlpZgUR031N9
+FZHgAQ0GWQKBgEyO6EVRgWSQfL37SvFKJ/Q/CmNN+Pifn1uSM2ySaHV7nN65e4K/
+y/pW10zae0kLC7WDJuKfc0brY9H2wDHY6uBatKk5pHAbiDejPjivz1GTMmZ2aR96
+XJdKOro5DdtKmwB/KWAkTg2sdlPwCxzcschjL7KLXnGomeqY+oavTO+FAoGBAJSF
+6Z4mwsN/TuAu2gohU4IL9zfybJJknJdMiYc3kWNplJjCBSiwiwdQmG7M43h+wIiv
+2XFY2wOSXH1nYQcXz+iyir3CqKVoLoqa1kkOBHtfzWN1cpcf8NMpV7yhRfFt7g2S
+HOqjkgOSeohBrfdAn4mQLFJHpQWuS3JQx6/2cDy5AoGBALzcIckt/0HfvhmjwSU+
+o9uCNb522CScZRJ41Md7ji9/f9JQ1lcQhIhOFsJpAd39BGhoG4Po2ltRk2SalTv8
+UD6Ca4+HAV+N45JdOvj+VUtSuQo7w2LWss31XAHLR8BlKEAZ7lKA9mXUHc+WO+5A
+TheD3SM/FwGb/HHti4PcGOYI
+-----END PRIVATE KEY-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIID2TCCAsGgAwIBAgIURGN2+17yDiEaBOGuTPqfCHY2tPwwDQYJKoZIhvcNAQEL
+BQAwbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxEzARBgNVBAcM
+Ck5ldyBKZXJzZXkxEDAOBgNVBAoMB01lbGFjb24xCzAJBgNVBAsMAjVHMRQwEgYD
+VQQDDAtSb290IFNNTyBDQTAeFw0yNDA5MjQxODIxMzJaFw0zNDA5MjIxODIxMzJa
+MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApOZXcgSmVyc2V5MRMwEQYDVQQHDApO
+ZXcgSmVyc2V5MRAwDgYDVQQKDAdNZWxhY29uMQswCQYDVQQLDAI1RzEUMBIGA1UE
+AwwLUm9vdCBTTU8gQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9
+UU1gbp1BIey877m1OqO+PrtfrR8srxb/kjMr/tCYIA+OtwYvPkSBJToE9MAVsEDL
+F1UC5AuMzKYvKkue9HWy34Q07MJUjPnt6wjsnd38lYK/+SrKqamRXZ93woiJApGL
+ny8zOvzoonDp2qOPzXNlOxXD4UCzCQsnuWsoFYI0Gze/7Gatrt6ZDF5bivgcHead
+lo4aA8NxqAJ0kwp5movPIDlMseTk3sY8JlgpiYMxP5N61QfgWymoPbyU+bPgqWBX
+ZohFjHxFens/5ubwdmipboGvyklyTG4N/1rv4Eo7pvzRJOC5iMivv27joeneetnR
+cpfNhHZE/27NMMhIwzEHAgMBAAGjczBxMA4GA1UdEQQHMAWBA3NtbzAOBgNVHQ8B
+Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSwwoGjtEhCqiGv
+ATHK0NUglBPsqjAdBgNVHQ4EFgQUsMKBo7RIQqohrwExytDVIJQT7KowDQYJKoZI
+hvcNAQELBQADggEBABbynr04B3DH6PJgZBZbbsoyaiSN6Sv7jy6RG8XbgcsixG36
+/FnrCjSpyQsCMBRTmIsRPFLCGw+A6PMKaEvadTjfyVQX9pVJw8oFRBP5RPgj/WSQ
+4aEY8Mp1Nw4NDvl4cbhOsi87P6RKG7/9ZTox3gtEo9MXLltWNDxo+yJNnbqvO3C4
+n/3f343KvdPehQRlT31ZTlO79VzNukRP0QiDvQ4b12BmrpYoOcaRcfs5xs+AjCDQ
+e/LNgP56zHiOE1IiREgu+aZt4dqd06GgveiXDsu8UrIWPvAPyIxlf5ggWb47a7fb
+BbR5W3FdLWxSuoOd2IrnefCiW0XS/fMlfPqxI64=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9UU1gbp1BIey8
+77m1OqO+PrtfrR8srxb/kjMr/tCYIA+OtwYvPkSBJToE9MAVsEDLF1UC5AuMzKYv
+Kkue9HWy34Q07MJUjPnt6wjsnd38lYK/+SrKqamRXZ93woiJApGLny8zOvzoonDp
+2qOPzXNlOxXD4UCzCQsnuWsoFYI0Gze/7Gatrt6ZDF5bivgcHeadlo4aA8NxqAJ0
+kwp5movPIDlMseTk3sY8JlgpiYMxP5N61QfgWymoPbyU+bPgqWBXZohFjHxFens/
+5ubwdmipboGvyklyTG4N/1rv4Eo7pvzRJOC5iMivv27joeneetnRcpfNhHZE/27N
+MMhIwzEHAgMBAAECggEABfmN5prhwvojcucMm7KeaP+pLDYrg16B7E5HPSk37hp8
+7d/K2yzXk/fXzUDoMFxf/x4yZE/21AUVbZb5IgAhws5uaWPbfOL3dFHJoKYZfmzo
+M89/ppEU3+3uKCUZ6AZjujNWQFipPgelEUxW2Hqpx1UbtRM5K9f/jnZknQmTaA+H
+RNOZeMKg1/AxCiwfw15OmG7Fz4St4yCPJsHhBOQLzP/FgveUWM/cM0G3oyWWJ0gX
+lZCH5ojPWbP2GVWga/0Xw4Z+MFJAH8K7b3/s+rQocH0rqGhMVNL7d12fhh7KgIv2
+Y3E8i4FUrREaCAJxciVEVc2vF1Y7VUPBtnr8bEQrOQKBgQDleAnDE57+k8DI/ofV
+dpS4EfjJ2rgrfn8oiJIrskjXulp2XmZ/dPZ8mUt3wx5hGEpPIOoWMo4TuVLpb1OP
+u+v4E/xuuuVhU8+yaKnPs5GEGyi+hJfFpBd5f10IUjuwvOx+85yGo4YHywihqTjT
+oZDMU6o5ktPoLvnxIvk2cXzm6wKBgQDTNNdBp3/awI6BTwF+N7Nu+tdKQWFJLD7O
+iXpRQQ+GKA0dO84kaKlpDz9ZwP3DzNmEgdcf1mSDaEHHJVpXRHGwols9yc3ffcCq
+8SUFFuEe5UpoAGtRIG9Bv05rZtsbCqf5qz7VWk56n+zA9ge0gnfLLrtYCcKVffpl
+QK1z+xhPVQKBgDNy9I1eitl9e04Vc5My4SlcLjHj7kMiO5R0+oD9mkN0LvA3Pjf5
+m4JYRIl3oAoZDiAruxB7CUv201YvdcbWVZPrtz+EfAWUaw8PVHOTSV8bT8lXpUfV
+AMZm/g7tkSCRW10jdcbiRxzcMvU8Idehc/u8DoCWIRj/315nfwTr8Rs9AoGBAI5+
+wBwTnjdAYuTrIN6/RdhCdK4sni54I4fFSTk44/hnXTGz/8igtGulVeCATLWlp7u2
+viVEyFvAI2Dw2pq2Gt5JK7XsSXHXrf2m5IsifJATsreoUL9TWrzJDWd45arA7cOM
+vb/ERd6Ft34Yf+pRe/EhflRPgXDKpf1aPaxaZHRhAoGAaWAfz+AdJ5q/kvXAcGct
+YSmow1Fo4IB4UlqVjH+YBdkK02zfujMfGTlvgehoqXj6AtD95lY2X25gu6/H8qDO
+PhT7MfCKS5GR00Gd/SUyp+Ri3cfzeJMaopyjeuUj6HBTeIbrBRhLObfpkIz/k5hl
+zCLNj8UUnRGRXa++osXaPNs=
+-----END PRIVATE KEY-----
--- /dev/null
+[ req ]
+distinguished_name = req_distinguished_name
+req_extensions = v3_req
+prompt = no
+
+[ req_distinguished_name ]
+C = US
+ST = New Jersey
+L = New Jersey
+O = Melacon
+OU = 5G
+CN = hybrid-odu
+
+[ v3_req ]
+keyUsage = critical, digitalSignature, keyCertSign, cRLSign
+subjectAltName = @alt_names
+
+[ alt_names ]
+email.1 = client.hybrid-odu@localhost
--- /dev/null
+[ req ]
+distinguished_name = req_distinguished_name
+req_extensions = v3_req
+prompt = no
+
+[ req_distinguished_name ]
+C = US
+ST = New Jersey
+L = New Jersey
+O = Melacon
+OU = 5G
+CN = SMO
+
+[ v3_req ]
+keyUsage = critical, digitalSignature, keyCertSign, cRLSign
+subjectAltName = @alt_names
+
+[ alt_names ]
+email.1 = client.smo@localhost
--- /dev/null
+diff --git a/src/netconf.c b/src/netconf.c
+index e0b790f..556e9c8 100644
+--- a/src/netconf.c
++++ b/src/netconf.c
+@@ -311,6 +311,21 @@ np2srv_rpc_editconfig_cb(sr_session_ctx_t *session, uint32_t UNUSED(sub_id), con
+ np_err_sr2nc_edit(session, user_sess->sess);
+ goto cleanup;
+ }
++
++ if (ds == SR_DS_RUNNING || ds == SR_DS_CANDIDATE) {
++ /* skip NACM check */
++ sr_session_switch_ds(user_sess->sess, SR_DS_STARTUP);
++
++ // sr_nacm_set_user(user_sess->sess, NULL);
++
++ if ((rc = sr_copy_config(user_sess->sess, NULL, ds, np2srv.sr_timeout))) {
++ /* prevent the error info being overwritten */
++ sr_session_dup_error(user_sess->sess, session);
++ }
++
++ /* set NACM username back */
++ // sr_nacm_set_user(user_sess->sess, nc_session_get_username(user_sess));
++ }
+ } else {
+ assert(!strcmp(testop, "test-only"));
+ if ((rc = sr_validate(user_sess->sess, NULL, 0))) {
+diff --git a/src/netconf_nmda.c b/src/netconf_nmda.c
+index 00d8cb4..fa7ced2 100644
+--- a/src/netconf_nmda.c
++++ b/src/netconf_nmda.c
+@@ -296,6 +296,21 @@ np2srv_rpc_editdata_cb(sr_session_ctx_t *session, uint32_t UNUSED(sub_id), const
+ goto cleanup;
+ }
+
++ if (ds == SR_DS_RUNNING || ds == SR_DS_CANDIDATE) {
++ /* skip NACM check */
++ sr_session_switch_ds(user_sess->sess, SR_DS_STARTUP);
++
++ // sr_nacm_set_user(user_sess->sess, NULL);
++
++ if ((rc = sr_copy_config(user_sess->sess, NULL, ds, np2srv.sr_timeout))) {
++ /* prevent the error info being overwritten */
++ sr_session_dup_error(user_sess->sess, session);
++ }
++
++ /* set NACM username back */
++ // sr_nacm_set_user(user_sess->sess, nc_session_get_username(user_sess));
++ }
++
+ cleanup:
+ if (user_sess) {
+ /* discard any changes that possibly failed to be applied */
--- /dev/null
+diff --git a/sysrepo/subscription.py b/sysrepo/subscription.py
+index 342adfb..c146f5c 100644
+--- a/sysrepo/subscription.py
++++ b/sysrepo/subscription.py
+@@ -412,6 +412,17 @@ def oper_data_callback(session, sub_id, module, xpath, req_xpath, req_id, parent
+ # The FFI bindings of libyang and sysrepo are different.
+ # Casting is required.
+ parent[0] = ffi.cast("struct lyd_node *", dnode.cdata)
++ elif isinstance(oper_data, DNode):
++ # convert oper_data to a libyang.DNode object
++ with session.get_ly_ctx() as ly_ctx:
++ if oper_data is not None:
++ if parent[0]:
++ root = DNode.new(ly_ctx, parent[0]).root()
++ root.merge(oper_data, destruct=True)
++ else:
++ # The FFI bindings of libyang and sysrepo are different.
++ # Casting is required.
++ parent[0] = ffi.cast("struct lyd_node *", oper_data.cdata)
+ elif oper_data is not None:
+ raise TypeError(
+ "bad return type from %s (expected dict or None)" % callback
--- /dev/null
+diff --git a/src/modinfo.c b/src/modinfo.c
+index 6dc66452..39c63e4a 100644
+--- a/src/modinfo.c
++++ b/src/modinfo.c
+@@ -3522,7 +3522,7 @@ sr_modinfo_generate_config_change_notif(struct sr_mod_info_s *mod_info, sr_sessi
+ }
+
+ /* changed-by username */
+- if ((err_info = sr_lyd_new_term(root, NULL, "username", session->user))) {
++ if ((err_info = sr_lyd_new_term(root, NULL, "username", (session->nacm_user != NULL) ? session->nacm_user : session->user))) {
+ goto cleanup;
+ }
+
+diff --git a/src/utils/subscribed_notifications.c b/src/utils/subscribed_notifications.c
+index a0694d04..16bc448c 100644
+--- a/src/utils/subscribed_notifications.c
++++ b/src/utils/subscribed_notifications.c
+@@ -40,9 +40,13 @@ srsn_filter_subtree2xpath(const struct lyd_node *subtree, sr_session_ctx_t *sess
+ sr_error_info_t *err_info = NULL;
+ struct srsn_filter filter = {0};
+
+- SR_CHECK_ARG_APIRET(!subtree || !xpath_filter, session, err_info);
++ SR_CHECK_ARG_APIRET(!xpath_filter, session, err_info);
+
+ *xpath_filter = NULL;
++ if (!subtree) {
++ *xpath_filter = strdup("*[1]");
++ goto cleanup;
++ }
+
+ /* create a filter structure first */
+ if ((err_info = srsn_filter_create_subtree(subtree, &filter))) {
--- /dev/null
+[ req ]
+distinguished_name = req_distinguished_name
+req_extensions = v3_ca
+prompt = no
+
+[ req_distinguished_name ]
+C = US
+ST = New Jersey
+L = New Jersey
+O = Melacon
+OU = 5G
+CN = Root O-DU CA
+
+[ v3_ca ]
+subjectAltName = @alt_names
+keyUsage = critical, keyCertSign, cRLSign
+basicConstraints = critical, CA:TRUE
+authorityKeyIdentifier = keyid:always, issuer
+
+[ alt_names ]
+email.1 = hybrid-odu
--- /dev/null
+[ req ]
+distinguished_name = req_distinguished_name
+req_extensions = v3_ca
+prompt = no
+
+[ req_distinguished_name ]
+C = US
+ST = New Jersey
+L = New Jersey
+O = Melacon
+OU = 5G
+CN = Root SMO CA
+
+[ v3_ca ]
+subjectAltName = @alt_names
+keyUsage = critical, keyCertSign, cRLSign
+basicConstraints = critical, CA:TRUE
+authorityKeyIdentifier = keyid:always, issuer
+
+[ alt_names ]
+email.1 = smo
--- /dev/null
+[supervisord]
+nodaemon=true
+logfile=/dev/null
+logfile_maxbytes=0
+pidfile=/var/run/supervisord.pid
+
+[program:netopeer2-server]
+command=/usr/local/sbin/netopeer2-server -d -v 3 -t 60 -x /data/ietf-yang-schema-mount.xml
+stdout_logfile=/var/log/netopeer2-server.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=false
+
+[program:sshd]
+command=/usr/sbin/sshd -D
+stdout_logfile=/var/log/sshd.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=false
+
+
+[program:vsftpd]
+command=/usr/sbin/vsftpd
+stdout_logfile=/var/log/vsftpd.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=true
--- /dev/null
+[supervisord]
+nodaemon=true
+logfile=/dev/null
+logfile_maxbytes=0
+pidfile=/var/run/supervisord.pid
+
+[program:netopeer2-server]
+command=/usr/local/sbin/netopeer2-server -d -v 2 -t 60
+stdout_logfile=/var/log/netopeer2-server.log
+stdout_logfile_backups=2
+redirect_stderr=true
+startsecs=0
+autorestart=true
+
+[program:sshd]
+command=/usr/sbin/sshd -D
+stdout_logfile=/var/log/sshd.log
+stdout_logfile_backups=2
+redirect_stderr=true
+startsecs=0
+autorestart=true
+
+[program:vsftpd]
+command=/usr/sbin/vsftpd
+stdout_logfile=/var/log/vsftpd.log
+stdout_logfile_backups=2
+redirect_stderr=true
+startsecs=0
+autorestart=true
+
+[program:pynts]
+command=python3 /app/application.py
+stdout_logfile=/var/log/pynts.log
+stdout_logfile_backups=2
+redirect_stderr=true
+startsecs=0
+autorestart=false
--- /dev/null
+listen=YES
+listen_ipv6=YES
+anonymous_enable=NO
+local_enable=YES
+write_enable=YES
+local_umask=022
+dirmessage_enable=YES
+use_localtime=YES
+xferlog_enable=YES
+connect_from_port_20=YES
+chroot_local_user=YES
+secure_chroot_dir=/var/run/vsftpd/empty
+pam_service_name=vsftpd
+pasv_enable=Yes
+pasv_min_port=10000
+pasv_max_port=11000
+user_sub_token=$USER
+local_root=/ftp
+userlist_enable=YES
+userlist_file=/etc/vsftpd.userlist
+userlist_deny=NO
+pasv_promiscuous=YES
+
+allow_writeable_chroot=YES
+
+# rsa_cert_file=/home/netconf/.ssh/melacon.server.crt
+# rsa_private_key_file=/home/netconf/.ssh/melacon.server.key
+# ssl_enable=YES
+# allow_anon_ssl=NO
+# force_local_data_ssl=YES
+# force_local_logins_ssl=YES
+# ssl_tlsv1=YES
+# ssl_sslv2=NO
+# ssl_sslv3=NO
+# require_ssl_reuse=NO
+# ssl_ciphers=HIGH
\ No newline at end of file
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+
+# common.sh - contains common functions and variables for the scripts
+
+# arrays of modules to (un)install
+NP2_MODULES=(
+"ietf-interfaces@2018-02-20.yang"
+"ietf-ip@2018-02-22.yang"
+"ietf-netconf@2013-09-29.yang -e writable-running -e candidate -e rollback-on-error -e validate -e startup -e url -e xpath -e confirmed-commit"
+"ietf-netconf-nmda@2019-01-07.yang -e origin -e with-defaults"
+"notifications@2008-07-14.yang"
+"nc-notifications@2008-07-14.yang"
+"ietf-netconf-monitoring@2010-10-04.yang"
+"ietf-network-instance@2019-01-21.yang"
+"ietf-subscribed-notifications@2019-09-09.yang -e encode-xml -e replay -e subtree -e xpath"
+"ietf-yang-push@2019-09-09.yang -e on-change"
+)
+
+LN2_MODULES=(
+"iana-ssh-encryption-algs@2022-06-16.yang"
+"iana-ssh-key-exchange-algs@2022-06-16.yang"
+"iana-ssh-mac-algs@2022-06-16.yang"
+"iana-ssh-public-key-algs@2022-06-16.yang"
+"iana-tls-cipher-suite-algs@2022-06-16.yang"
+"ietf-x509-cert-to-name@2014-12-10.yang"
+"iana-crypt-hash@2014-04-04.yang -e crypt-hash-md5 -e crypt-hash-sha-256 -e crypt-hash-sha-512"
+"ietf-crypto-types@2023-12-28.yang -e cleartext-passwords -e cleartext-private-keys -e certificate-expiration-notification"
+"ietf-keystore@2023-12-28.yang -e central-keystore-supported -e inline-definitions-supported -e asymmetric-keys"
+"ietf-truststore@2023-12-28.yang -e central-truststore-supported -e inline-definitions-supported -e certificates -e public-keys"
+"ietf-tcp-common@2023-12-28.yang -e keepalives-supported"
+"ietf-tcp-server@2023-12-28.yang -e tcp-server-keepalives"
+"ietf-tcp-client@2023-12-28.yang -e local-binding-supported -e tcp-client-keepalives"
+"ietf-ssh-common@2023-12-28.yang -e transport-params"
+"ietf-ssh-server@2023-12-28.yang -e local-users-supported -e local-user-auth-publickey -e local-user-auth-password -e local-user-auth-none -e ssh-server-keepalives"
+"ietf-tls-common@2023-12-28.yang -e tls10 -e tls11 -e tls12 -e tls13 -e hello-params"
+"ietf-tls-server@2023-12-28.yang -e server-ident-x509-cert -e client-auth-supported -e client-auth-x509-cert -e tls-server-keepalives"
+"ietf-netconf-server@2023-12-28.yang -e ssh-listen -e tls-listen -e ssh-call-home -e tls-call-home -e central-netconf-server-supported"
+"libnetconf2-netconf-server@2024-07-09.yang"
+)
+
+PYNTS_MODULES=(
+"iana-if-type.yang"
+"iana-hardware.yang"
+"ietf-inet-types.yang"
+"ietf-hardware.yang -e hardware-state"
+"ietf-system.yang"
+"ieee802-dot1q-types.yang"
+"ieee802-dot1x-types.yang"
+"ieee802-dot1q-cfm-types.yang"
+"ieee802-types.yang"
+"ieee802-dot1q-cfm.yang"
+"ieee802-dot1x.yang"
+"ietf-datastores.yang"
+"ietf-dhcpv6-common.yang"
+"ietf-dhcpv6-types.yang"
+"ietf-netconf-acm.yang"
+"ietf-netconf-notifications.yang"
+"ietf-restconf.yang"
+"ietf-yang-library.yang"
+"ietf-yang-schema-mount.yang"
+"ietf-yang-types.yang"
+
+"onap-system.yang"
+)
+
+PERMS=${NP2_MODULE_PERMS}
+OWNER=${NP2_MODULE_OWNER}
+GROUP=${NP2_MODULE_GROUP}
+
+# get path to the sysrepocfg executable
+function SYSREPOCFG_GET_PATH() {
+ if [ -n "$SYSREPOCFG_EXECUTABLE" ]; then
+ # from env
+ SYSREPOCFG="$SYSREPOCFG_EXECUTABLE"
+ elif [ $(id -u) -eq 0 ] && [ -n "$USER" ] && [ $(command -v su) ]; then
+ # running as root, avoid problems with sudo PATH
+ SYSREPOCFG=$(su -c 'command -v sysrepocfg' -l "$USER")
+ else
+ # normal user
+ SYSREPOCFG=$(command -v sysrepocfg)
+ fi
+
+ if [ -z "$SYSREPOCFG" ]; then
+ echo "$0: Unable to find sysrepocfg executable." >&2
+ exit 1
+ fi
+}
+
+# get path to the sysrepoctl executable
+function SYSREPOCTL_GET_PATH() {
+ if [ -n "$SYSREPOCTL_EXECUTABLE" ]; then
+ # from env
+ SYSREPOCTL="$SYSREPOCTL_EXECUTABLE"
+ elif [ $(id -u) -eq 0 ] && [ -n "$USER" ] && [ $(command -v su) ]; then
+ # running as root, avoid problems with sudo PATH
+ SYSREPOCTL=$(su -c 'command -v sysrepoctl' -l "$USER")
+ else
+ # normal user
+ SYSREPOCTL=$(command -v sysrepoctl)
+ fi
+
+ if [ -z "$SYSREPOCTL" ]; then
+ echo "$0: Unable to find sysrepoctl executable." >&2
+ exit 1
+ fi
+}
+
+# get path to the openssl executable
+function OPENSSL_GET_PATH() {
+ if [ -n "$OPENSSL_EXECUTABLE" ]; then
+ # from env
+ OPENSSL="$OPENSSL_EXECUTABLE"
+ elif [ $(id -u) -eq 0 ] && [ -n "$USER" ] && [ $(command -v su) ]; then
+ # running as root, avoid problems with sudo PATH
+ OPENSSL=$(su -c 'command -v openssl' -l "$USER")
+ else
+ # normal user
+ OPENSSL=$(command -v openssl)
+ fi
+
+ if [ -z "$OPENSSL" ]; then
+ echo "$0: Unable to find sysrepoctl executable." >&2
+ exit 1
+ fi
+}
+
+# functions
+function INSTALL_MODULE_CMD() {
+ if [ -z "${CMD_INSTALL}" ]; then
+ CMD_INSTALL="'$SYSREPOCTL' -s '$1' -v2"
+ fi
+
+ CMD_INSTALL="$CMD_INSTALL -i $1/$2 -p '$PERMS'"
+ if [ ! -z "${OWNER}" ]; then
+ CMD_INSTALL="$CMD_INSTALL -o '$OWNER'"
+ fi
+ if [ ! -z "${GROUP}" ]; then
+ CMD_INSTALL="$CMD_INSTALL -g '$GROUP'"
+ fi
+}
+
+function UPDATE_MODULE() {
+ CMD="'$SYSREPOCTL' -U $1/$2 -s '$1' -v2"
+ eval "$CMD"
+ local rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+}
+
+function CHANGE_PERMS() {
+ CMD="'$SYSREPOCTL' -c $1 -p '$PERMS' -v2"
+ if [ ! -z "${OWNER}" ]; then
+ CMD="$CMD -o '$OWNER'"
+ fi
+ if [ ! -z "${GROUP}" ]; then
+ CMD="$CMD -g '$GROUP'"
+ fi
+
+ eval "$CMD"
+ local rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+}
+
+function ENABLE_FEATURE() {
+ "$SYSREPOCTL" -c $1 -e $2 -v2
+ local rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+}
+
+function SETUP_CMD() {
+ module_dir="$1" # first argument - module directory
+ shift # shift all args to the left
+ modules=("$@") # the rest of the arguments are module names (and their features)
+ for i in "${modules[@]}"; do
+ name=$(echo "$i" | sed 's/\([^@]*\).*/\1/')
+ sctl_module=$(echo "$SCTL_MODULES" | grep "^$name \+|[^|]*| I")
+ if [ -z "$sctl_module" ]; then
+ # prepare command to install module with all its features
+ INSTALL_MODULE_CMD "$module_dir" "$i"
+ continue
+ fi
+
+ sctl_revision=$(echo "$sctl_module" | sed 's/[^|]*| \([^ ]*\).*/\1/')
+ revision=$(echo "$i" | sed 's/[^@]*@\([^\.]*\).*/\1/')
+ if [ "$sctl_revision" \< "$revision" ]; then
+ # update module without any features
+ file=$(echo "$i" | cut -d' ' -f 1)
+ UPDATE_MODULE "$module_dir" "$file"
+ fi
+
+ sctl_owner=$(echo "$sctl_module" | sed 's/\([^|]*|\)\{3\} \([^:]*\).*/\2/')
+ sctl_group=$(echo "$sctl_module" | sed 's/\([^|]*|\)\{3\}[^:]*:\([^ ]*\).*/\2/')
+ sctl_perms=$(echo "$sctl_module" | sed 's/\([^|]*|\)\{4\} \([^ ]*\).*/\2/')
+ if [ "$sctl_perms" != "$PERMS" ] || [ ! -z "${OWNER}" -a "$sctl_owner" != "$OWNER" ] || [ ! -z "${GROUP}" -a "$sctl_group" != "$GROUP" ]; then
+ # change permissions/owner
+ CHANGE_PERMS "$name"
+ fi
+
+ # parse sysrepoctl features and add extra space at the end for easier matching
+ sctl_features="`echo "$sctl_module" | sed 's/\([^|]*|\)\{6\}\(.*\)/\2/'` "
+ # parse features we want to enable
+ features=$(echo "$i" | sed 's/[^ ]* \(.*\)/\1/')
+ while [ "${features:0:3}" = "-e " ]; do
+ # skip "-e "
+ features=${features:3}
+ # parse feature
+ feature=$(echo "$features" | sed 's/\([^[:space:]]*\).*/\1/')
+
+ # enable feature if not already
+ sctl_feature=$(echo "$sctl_features" | grep " ${feature} ")
+ if [ -z "$sctl_feature" ]; then
+ # enable feature
+ ENABLE_FEATURE $name $feature
+ fi
+
+ # next iteration, skip this feature
+ features=$(echo "$features" | sed 's/[^[:space:]]* \(.*\)/\1/')
+ done
+ done
+}
--- /dev/null
+#!/usr/bin/env bash
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+# env variables NP2_MODULE_DIR, NP2_MODULE_PERMS and LN2_MODULE_DIR must be defined
+# and NP2_MODULE_OWNER, NP2_MODULE_GROUP will be used if defined when executing this script!
+
+if [ -z "$NP2_MODULE_DIR" -o -z "$NP2_MODULE_PERMS" -o -z "$LN2_MODULE_DIR" -o -z "$PYNTS_MODULE_DIR" ]; then
+ echo "Required environment variables not defined!"
+ exit 1
+fi
+
+# import functions and modules arrays
+script_directory=$(dirname "$0")
+source "${script_directory}/common.sh"
+
+# get path to sysrepoctl executable, this will be stored in $SYSREPOCTL
+SYSREPOCTL_GET_PATH
+
+NP2_MODDIR=${DESTDIR}${NP2_MODULE_DIR}
+LN2_MODDIR=${DESTDIR}${LN2_MODULE_DIR}
+PYNTS_MODDIR=${DESTDIR}${PYNTS_MODULE_DIR}
+
+# get current modules
+SCTL_MODULES=`$SYSREPOCTL -l`
+
+# the install command will be stored in this variable
+CMD_INSTALL=
+
+# setup the cmd for install, modules are listed in common.sh
+SETUP_CMD "$NP2_MODDIR" "${NP2_MODULES[@]}"
+
+SETUP_CMD "$LN2_MODDIR" "${LN2_MODULES[@]}"
+
+SETUP_CMD "$PYNTS_MODDIR" "${PYNTS_MODULES[@]}"
+
+# install all the new modules
+if [ ! -z "${CMD_INSTALL}" ]; then
+ eval $CMD_INSTALL
+ rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+fi
--- /dev/null
+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.";
+}
+}
--- /dev/null
+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
+ <mailto:iana&iana.org>";
+ 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.
+ <http://www.iana.org/assignments/smi-numbers>";
+
+ 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.";
+ }
+}
--- /dev/null
+module ieee802-dot1q-cfm-types {
+ yang-version 1.1;
+
+ namespace "urn:ieee:std:802.1Q:yang:ieee802-dot1q-cfm-types";
+ prefix "cfm-types";
+
+ organization
+ "IEEE 802.1 Working Group";
+
+ contact
+ "WG-URL: http://ieee802.org/1/
+ WG-EMail: stds-802-1-l@ieee.org
+
+ Contact: IEEE 802.1 Working Group Chair
+ Postal: C/O IEEE 802.1 Working Group
+ IEEE Standards Association
+ 445 Hoes Lane
+ Piscataway, NJ 08854
+ USA
+
+ E-mail: stds-802-1-chairs@ieee.org";
+
+ description
+ "Common types used within ieee802-dot1q-cfm modules.";
+
+ revision 2020-06-04 {
+ description
+ "Published as part of IEEE Std 802.1Qcx-2020.
+ Initial version.";
+ reference
+ "IEEE Std 802.1Qcx-2020, Bridges and Bridged Networks -
+ YANG Data Model for Connectivity Fault Management.";
+ }
+
+ /* ------------------------------------------------------
+ * Type definitions used by 802.1Qcx YANG module.
+ * ------------------------------------------------------
+ */
+
+ typedef unicast-mac-address-type {
+ type string {
+ pattern "[0-9a-fA-F][02468aAcCeE](-[0-9a-fA-F]{2}){5}";
+ }
+ description
+ "A unicast destination MAC address. The I/G address bit is
+ used to identify the destination MAC address as an individual
+ MAC address or a group MAC address. If the I/G address bit is
+ 0, it indicates that the MAC address field is an individual
+ MAC address. If this bit is 1, the MAC address is a group MAC
+ address that identifies one or more (or all) stations
+ connected to the IEEE 802 network";
+ }
+
+ typedef multicast-class1-mac-address-type {
+ type string {
+ pattern "(01-80-C2-00-00-3)[0-7]";
+ }
+
+ description
+ "The multicast class 1 MAC address must take the
+ form of 01-80-C2-00-00-3x, where x represents
+ the MEG level, with x being a value in the range
+ of 0..7.";
+ }
+
+ typedef mp-type {
+ type enumeration {
+ enum mhf {
+ value 1;
+ description
+ "Indicates a MHF.";
+ }
+ enum mep {
+ value 2;
+ description
+ "Indicates a MEP.";
+ }
+ }
+ description
+ "Indicates the type of Maintenance Point.";
+ }
+
+ typedef mhf-creation-type {
+ type enumeration {
+ enum mhf-none {
+ value 1;
+ description
+ "No MHFs can be created for designated VID(s) or ISID.";
+ }
+ enum mhf-default {
+ value 2;
+ description
+ "MHFs can be created for designated VID(s) or ISID on any
+ Bridge Port through which the VID(s) or ISID can pass, where:
+ i) There are no lower active MD levels; or
+ ii) There is a MEP at the next lower active MD level on
+ the port.";
+ }
+ enum mhf-explicit {
+ value 3;
+ description
+ "MHFs can be created for designated VID(s) or ISID only
+ on Bridge Ports through which the VID(s) or ISID can pass,
+ and only if there is a MEP at the next lower active
+ MD level on the port.";
+ }
+ enum mhf-defer {
+ value 4;
+ description
+ "In the Maintenance Association only, the control of MHF
+ creation is deferred to the corresponding variable in
+ the enclosing Maintenance Domain.";
+ }
+ }
+ description
+ "Indicates if the Management Entity can create MHFs.";
+ }
+
+ typedef mp-direction-type {
+ type enumeration {
+ enum down {
+ value 1;
+ description
+ "Down maintenance point, where CFM protocol messages
+ are dispatched away from the MAC Relay entity.";
+ }
+ enum up {
+ value 2;
+ description
+ "Up maintenance point, where CFM protocol messages
+ are dispatched towards the MAC Relay entity.";
+ }
+ }
+ description
+ "Indicates the direction in which the Maintenance
+ Point (MEP or MIP) faces on the Bridge Port.";
+ }
+
+ typedef mep-id-type {
+ type uint16 {
+ range "1..8191";
+ }
+ description
+ "Maintenance association End Point Identifier, which is
+ unique over a given Maintenance Association.";
+ }
+
+ typedef md-level-type {
+ type uint8 {
+ range "0..7";
+ }
+ 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.";
+ }
+
+ typedef port-status-tlv-value-type {
+ type enumeration {
+ enum no-port-state-tlv {
+ value 0;
+ description
+ "Indicates either that no CCM has been received or that
+ no port status TLV was present in the last CCM received.";
+ }
+ enum blocked {
+ value 1;
+ description
+ "Ordinary data cannot pass freely through the port on
+ which the remote MEP resides.";
+ }
+ enum up {
+ value 2;
+ description
+ "Ordinary data can pass freely through the port on which
+ the remote MEP resides.";
+ }
+ }
+ description
+ "An enumerated value from the Port Status TLV from the last CCM
+ received from the last MEP. It indicates the ability of the
+ Bridge Port on which the transmitting MEP resides to pass
+ ordinary data, regardless of the status of the MAC.";
+ }
+
+ typedef interface-status-tlv-value-type {
+ type enumeration {
+ enum no-interface-status-tlv {
+ value 0;
+ description
+ "Indicates either that no CCM has been received or that
+ no interface status TLV was present in the last CCM
+ received.";
+ }
+ enum up {
+ value 1;
+ description
+ "The interface is ready to pass packets.";
+ }
+ enum down {
+ value 2;
+ description
+ "The interface can not pass packets.";
+ }
+ enum testing {
+ value 3;
+ description
+ "The interface is in some test mode.";
+ }
+ enum unknown {
+ value 4;
+ description
+ "The interface status cannot be determined for some
+ reason.";
+ }
+ enum dormant {
+ value 5;
+ description
+ "The interface is not in a state to pass packets but is in
+ a pending state, waiting for some external event.";
+ }
+ enum not-present {
+ value 6;
+ description
+ "Some component of the interface is missing.";
+ }
+ enum lower-layer-down {
+ value 7;
+ description
+ "The interface is down due to state of the lower layer
+ interface.";
+ }
+ }
+ description
+ "An enumerated value from the Interface Status TLV from the
+ last CCM received from the last MEP. It indicates the status
+ of the Interface within which the MEP transmitting the CCM
+ is configured, or the next lower Interface in the Interface
+ Stack, if the MEP is not configured within an Interface.";
+ }
+
+ typedef highest-defect-priority-type {
+ type enumeration {
+ enum none {
+ value 0;
+ description
+ "No defects since Fault Notification Generator state
+ machine reset.";
+ }
+ enum def-rdi-ccm {
+ value 1;
+ description
+ "The last CCM received by this MEP from some remote MEP
+ contained the RDI bit set.";
+ }
+ enum def-mac-status {
+ value 2;
+ description
+ "The last CCM received by this MEP from some remote MEP
+ indicating that the transmitting MEP's associated MAC is
+ reporting its status via the Port Status TLV or Interface
+ Status TLV.";
+ }
+ enum def-remote-ccm {
+ value 3;
+ description
+ "This MEP is not receiving CCMs from some other MEP in its
+ configured list.";
+ }
+ enum def-error-ccm {
+ value 4;
+ description
+ "This MEP is receiving invalid CCMs.";
+ }
+ enum def-xcon-ccm {
+ value 5;
+ description
+ "This MEP is receiving CCMs that could be from some other
+ MA.";
+ }
+ }
+ description
+ "An enumerated value, equal to the contents of the variable
+ highestDefect (20.35.9 and Table 20-1), indicating the
+ highest-priority defect that has been present since the MEP
+ Fault Notification Generator State Machine was last in the
+ FNG_RESET state.
+ The integer value assigned to the enum value determines the
+ priority. The higher value corresponds to the higher priority.";
+ }
+
+ typedef lowest-alarm-priority-type {
+ type enumeration {
+ enum all-def {
+ value 1;
+ description
+ "Includes def-rdi-ccm, def-mac-status, def-remote-ccm,
+ def-error-ccm, and def-xcon-ccm.";
+ }
+ enum mac-remote-error-xcon {
+ value 2;
+ description
+ "Only includes def-mac-status, def-remote-ccm,
+ def-error-ccm, and def-xcon-ccm.";
+ }
+ enum remote-error-xcon {
+ value 3;
+ description
+ "Includes def-remote-ccm, def-error-ccm, and def-xcon-ccm.";
+ }
+ enum error-xcon {
+ value 4;
+ description
+ "Includes def-error-ccm and def-xcon-ccm.";
+ }
+ enum xcon {
+ value 5;
+ description
+ "Only def-xcon-ccm";
+ }
+ enum no-xcon {
+ value 6;
+ description
+ "No defects def-xcon or lower are to be reported.";
+ }
+ }
+ description
+ "Specifies the lowest priority defect that is allowed to
+ generate a Fault Alarm (20.9.5). The to be reported defects
+ are identified per enum value.";
+ }
+
+ typedef sender-id-permission-type {
+ type enumeration {
+ enum send-id-none {
+ value 1;
+ description
+ "The Sender ID TLV is not to be sent.";
+ }
+ enum send-id-chassis {
+ value 2;
+ description
+ "The Chassis ID Length, Chassis ID Subtype, and Chassis ID
+ fields of the Sender ID TLV are to be sent.";
+ }
+ enum send-id-manage {
+ value 3;
+ description
+ "The Management Address Length and Management Address
+ of the Sender ID TLV are to be sent.";
+ }
+ enum send-id-chassis-manage {
+ value 4;
+ description
+ "The Chassis ID Length, Chassis ID Subtype, Chassis ID,
+ Management Address Length and Management Address fields are
+ all to be sent.";
+ }
+ enum send-id-defer {
+ value 5;
+ description
+ "The content of the Sender ID TLV are determined by the
+ corresponding Maintenance Domain variable.";
+ }
+ }
+ description
+ "Indicates what, if anything, is to be included in the Sender
+ ID TLV transmitted in CCMs, LBMs, LTMs, and LTRs.";
+ }
+
+ typedef ccm-interval-type {
+ type enumeration {
+ enum 300hz {
+ value 1;
+ description
+ "CCM PDUs are sent every 3 1/3 milliseconds (300Hz).";
+ }
+ enum 10ms {
+ value 2;
+ description
+ "CCM PDUs are sent every 10 milliseconds.";
+ }
+ enum 100ms {
+ value 3;
+ description
+ "CCM PDUs are sent every 100 milliseconds.";
+ }
+ enum 1sec {
+ value 4;
+ description
+ "CCM PDUs are sent every second.";
+ }
+ enum 10sec {
+ value 5;
+ description
+ "CCM PDUs are sent every 10 seconds.";
+ }
+ enum 1min {
+ value 6;
+ description
+ "CCM PDUs are sent every minute.";
+ }
+ enum 10min {
+ value 7;
+ description
+ "CCM PDUs are sent every 10 minutes.";
+ }
+ }
+ description
+ "Indicates the interval at which CCM PDUs are sent by a MEP.";
+ }
+
+ typedef fng-state-type {
+ type enumeration {
+ enum fng-reset {
+ value 1;
+ description
+ "No defect has been present since the MEP's fng-reset-time
+ timer expired, or since the state machine was last reset.";
+ }
+ enum fng-defect {
+ value 2;
+ description
+ "A defect is present, but not for a long enough time to be
+ reported.";
+ }
+ enum fng-report-defect {
+ value 3;
+ description
+ "A momentary state during which the defect is reported by
+ sending a fault-alarm notification, if that action is
+ enabled.";
+ }
+ enum fng-defect-reported {
+ value 4;
+ description
+ "A defect is present, and some defect has been reported.";
+ }
+ enum fng-defect-clearing {
+ value 5;
+ description
+ "No defect is present, but the MEP's fng-reset-time timer
+ has not yet expired.";
+ }
+ }
+ description
+ "Indicates the different states of the MEP Fault Notification
+ Generator State Machine.";
+ }
+
+ typedef relay-action-field-value-type {
+ type enumeration {
+ enum relay-hit {
+ value 1;
+ description
+ "The LTM reached a Maintenance Point whose MAC address
+ matches the target address.";
+ }
+ enum relay-fdb {
+ value 2;
+ description
+ "The Egress Port was determined by consulting the Filtering
+ Database.";
+ }
+ enum relay-mpdb {
+ value 3;
+ description
+ "The Egress Port was determined by consulting the MIP CCM
+ Database.";
+ }
+ }
+ description
+ "Possible values the Relay action field can take.";
+ }
+
+ typedef ingress-action-field-value-type {
+ type enumeration {
+ enum ingress-ok {
+ value 1;
+ description
+ "The target data frame would be passed through to the MAC
+ Relay Entity.";
+ }
+ enum ingress-down {
+ value 2;
+ description
+ "The Bridge Ports MAC_Operational parameter is false.";
+ }
+ enum ingress-blocked {
+ value 3;
+ description
+ "The target data frame would not be forwarded if received on
+ this Port due to active topology enforcement.";
+ }
+ enum ingress-vid {
+ value 4;
+ description
+ "The ingress port is not in the member set of the LTMs VID,
+ and ingress filtering is enabled, so the target data frame
+ would be filtered by ingress filtering.";
+ }
+ }
+ description
+ "Possible values returned in the ingress action field.";
+ }
+
+ typedef egress-action-field-value-type {
+ type enumeration {
+ enum egress-okay {
+ value 1;
+ description
+ "The targeted data frame would be forwarded.";
+ }
+ enum egress-down {
+ value 2;
+ description
+ "The Egress Port can be identified, but that Bridge Port
+ MAC_Operational parameter is false.";
+ }
+ enum egress-blocked {
+ value 3;
+ description
+ "The Egress Port can be identified, but the data frame would
+ not pass through the Egress Port due to active topology
+ management (i.e., the Bridge Port is not in the
+ Forwarding state.";
+ }
+ enum egress-vid {
+ value 4;
+ description
+ "The Egress Port can be identified, but the Bridge Port is
+ not in the LTMs VIDs member set, so would be filtered by
+ egress filtering.";
+ }
+ }
+ description
+ "Possible values returned in the egress action field.";
+ }
+
+ typedef remote-mep-state-type {
+ type enumeration {
+ enum rmep-idle {
+ value 1;
+ description
+ "Momentary state during reset.";
+ }
+ enum rmep-start {
+ value 2;
+ description
+ "The timer has not expired since the state machine
+ was reset, and no valid CCM has yet been received.";
+ }
+ enum rmep-failed {
+ value 3;
+ description
+ "The timer has expired, both since the state machine was
+ reset, and since a valid CCM was received.";
+ }
+ enum rmep-ok {
+ value 4;
+ description
+ "The timer has not expired since a valid CCM was received.";
+ }
+ }
+ description
+ "Operational state of the remote MEP state machine. This
+ state machine monitors the reception of valid CCMs from a
+ remote MEP with a specific MEPID. It uses a timer that
+ expires in 3.5 times the length of time indicated by the
+ MA's ccm-interval object.";
+ }
+
+ typedef mep-defects-type {
+ type bits {
+ bit def-rdi-ccm {
+ position 0;
+ description
+ "A remote MEP reported that RDI bit in its last CCM.";
+ }
+ bit def-mac-status {
+ position 1;
+ description
+ "Either some remote MEP is reporting its Interface Status
+ TLV as not isUp, or all remote MEPs are reporting a Port
+ Status TLV that contains some value other than psUp.";
+ }
+ bit def-remote-ccm {
+ position 2;
+ description
+ "The MEP is not receiving valid CCMs from at least one of
+ the remote MEPs.";
+ }
+ bit def-error-ccm {
+ position 3;
+ description
+ "The MEP has received at least one invalid CCM whose CCM
+ Interval has not yet timed out.";
+ }
+ bit def-xcon-ccm {
+ position 4;
+ description
+ "The MEP has received at last one CCM from either another
+ MAID or a lower MD level whose CCM Interval has not yet
+ timed out.";
+ }
+ }
+ description
+ "A MEP can detect and report a number of defects, and multiple
+ defects can be present at the same time.";
+ }
+
+ typedef config-error-type {
+ type bits {
+ bit cfm-leak {
+ position 0;
+ description
+ "MA x is associated with a specific VID list, one or more
+ of the VIDs in MA x can pass through the Bridge Port,
+ no Down MEP is configured on any Bridge Port for MA x,
+ and some other MA y, at a higher MD Level than MA x, and
+ associated with at least one of the VID(s) also in MA x,
+ does have a MEP configured on the Bridge Port.";
+ }
+ bit conflicting-vids {
+ position 1;
+ description
+ "MA x is associated with a specific VID list, an Up MEP is
+ configured on MA x on the Bridge Port, and some other MA y,
+ associated with at least one of the VID(s) also in MA x,
+ also has an Up MEP configured on some Bridge Port.";
+ }
+ bit excessive-levels {
+ position 2;
+ description
+ "The number of different MD Levels at which MIPs are to be
+ created on this port exceeds the Bridge's capabilities.";
+ }
+ bit overlapped-levels {
+ position 3;
+ description
+ "A MEP is created for one VID at one MD Level, but a MEP is
+ configured on another VID at that MD Level or higher,
+ exceeding the Bridge's capabilities.";
+ }
+ }
+ description
+ "While making the MIP creation evaluation described in
+ 22.2.3, the management entity can encounter errors in
+ the configuration.";
+ }
+
+ typedef mep-tx-ltm-flags-type {
+ type bits {
+ bit use-fdb-only {
+ position 1;
+ description
+ "Use FDB only";
+ }
+ }
+ description
+ "The flags field for LTMs transmitted by the MEP.";
+ }
+
+ typedef fault-alarm-type {
+ type enumeration {
+ enum address {
+ value 1;
+ description
+ "Indicates that a Network address to which Fault Alarms
+ are to be transmitted should be used.";
+ }
+ enum not-transmitted {
+ value 2;
+ description
+ "Indicates that Fault alarms are not to be transmitted.";
+ }
+ }
+ description
+ "The Fault Alarm indicators.";
+ }
+
+ typedef lbm-data-tlv-type {
+ type binary {
+ length "1..1480";
+ }
+ description
+ "The loopback message Data TLV type.";
+ }
+
+ typedef name-key-type {
+ type string {
+ length "1..255";
+ pattern '[0-9a-zA-Z\-_.]*';
+ }
+ description
+ "String type with at least 1 and up to 255 of the specified
+ characters.";
+ }
+
+ typedef seq-number-type {
+ type uint32 {
+ range "0..4294967295";
+ }
+ description
+ "The transaction identifier or sequence number of the CFM PDU.";
+ }
+
+ typedef service-selector-type {
+ type enumeration {
+ enum ieee-reserved-0 {
+ value 0;
+ description
+ "Reserved for definition by IEEE 802.1.";
+ }
+ enum vlan-id {
+ value 1;
+ description
+ "12-bit identifier found in a VLAN tag.";
+ }
+ enum isid {
+ value 2;
+ description
+ "24-bit identifier found in an I-TAG.";
+ }
+ enum tesid {
+ value 3;
+ description
+ "32-bit identifier";
+ }
+ enum segid {
+ value 4;
+ description
+ "32-bit identifier";
+ }
+ enum path-tesid {
+ value 5;
+ description
+ "32-bit identifier";
+ }
+ enum group-isid {
+ value 6;
+ description
+ "24 bit identifier";
+ }
+ enum ieee-reserved {
+ value 7;
+ description
+ "Reserved for definition by IEEE 802.1";
+ }
+ }
+ default "vlan-id";
+ description
+ "A value that represents a type (and thereby the format)
+ of a service-selector-value.";
+ }
+
+ typedef service-selector-value-type {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "An integer that uniquely identifies a generic MAC Service,
+ or none. Examples of service selectors are a VLAN-ID
+ and an I-SID. A service-selector-value value is always
+ interpreted within the context of a service-selector-type
+ value. Every usage of the service-selector-value textual
+ convention is required to specify the
+ service-selector-type object that provides the context.
+ The value of a service-selector-value object must
+ always be consistent with the value of the associated
+ service-selector-type object. Attempts to set a
+ service-selector-value object to a value inconsistent
+ with the associated service-selector-type must fail
+ with an inconsistent-value error.";
+ }
+
+} // ieee802-dot1q-cfm-types
\ No newline at end of file
--- /dev/null
+module ieee802-dot1q-cfm {
+ yang-version 1.1;
+
+ namespace "urn:ieee:std:802.1Q:yang:ieee802-dot1q-cfm";
+ prefix "dot1q-cfm";
+
+ import ieee802-dot1q-cfm-types { prefix "cfm-types"; }
+ import ieee802-dot1q-types { prefix "dot1q-types"; }
+ import ieee802-types { prefix "ieee"; }
+ import ietf-yang-types { prefix "yang"; }
+ import ietf-inet-types { prefix "inet"; }
+
+ organization
+ "IEEE 802.1 Working Group";
+
+ contact
+ "WG-URL: http://ieee802.org/1/
+ WG-EMail: stds-802-1-l@ieee.org
+
+ Contact: IEEE 802.1 Working Group Chair
+ Postal: C/O IEEE 802.1 Working Group
+ IEEE Standards Association
+ 445 Hoes Lane
+ Piscataway, NJ 08854
+ USA
+
+ E-mail: stds-802-1-chairs@ieee.org";
+
+ description
+ "Connectivity Fault Management (CFM) comprises capabilities
+ for detecting, verifying, and isolating connectivity failures
+ in Virtual Bridged Local Area Networks. These capabilities
+ can be used in networks operated by multiple independent
+ organizations, each with restricted management access to each
+ other's equipment.";
+
+ revision 2020-06-04 {
+ description
+ "Published as part of IEEE Std 802.1Qcx-2020.
+ Initial version.";
+ reference
+ "IEEE Std 802.1Qcx-2020, Bridges and Bridged Networks -
+ YANG Data Model for Connectivity Fault Management.";
+ }
+
+ /* -------------------------------------------------
+ * Grouping definitions used by 802.1Qcx YANG module
+ * -------------------------------------------------
+ */
+
+ grouping mac-address-and-uint-type-grouping {
+ description
+ "The MAC address and uint type grouping.";
+ container mac-address-and-uint-type {
+ description
+ "The MAC address and uint type definition.";
+ leaf address {
+ type ieee:mac-address;
+ mandatory true;
+ description
+ "The MAC address.";
+ }
+ leaf int {
+ type uint16;
+ mandatory true;
+ description
+ "The additional 2-octet (unsigned) integer.";
+ }
+ }
+ }
+
+ grouping md-name-choice-grouping {
+ description
+ "The Maintenance Domain name and name format choice.";
+ choice md-name {
+ default char-string;
+ description
+ "The Maintenance Domain name type.";
+ case none {
+ leaf none {
+ type empty;
+ description
+ "No format specified, usually because there is not a
+ Maintenance Domain Name. The Maintenance Domain name
+ inserted in CFM protocol messages will be a zero
+ length OCTET string.";
+ }
+ }
+ case dns-like-name {
+ leaf dns-like-name {
+ type string {
+ length "1..43";
+ }
+ description
+ "Domain name like string, globally unique text string
+ derived from a DNS name.";
+ }
+ }
+ case mac-address-and-uint {
+ uses mac-address-and-uint-type-grouping;
+ description
+ "MAC address plus 2-octet (unsigned) integer.";
+ }
+ case char-string {
+ leaf char-string {
+ type string {
+ length "1..43";
+ pattern '[ -~]*';
+ }
+ default "DEFAULT";
+ description
+ "RFC2579 DisplayString, except that the character
+ codes 0-31 (decimal) are not used.";
+ }
+ }
+ }
+ }
+
+ grouping ma-name-choice-grouping {
+ description
+ "The Maintenance Association name and name format choice.";
+ choice ma-name {
+ mandatory true;
+ description
+ "The Maintenance Association name type.";
+ case primary-vid {
+ leaf primary-vid {
+ type dot1q-types:vlanid;
+ description
+ "Primary VLAN ID. 12 bits represented in a 2-octet integer.";
+ }
+ }
+ case char-string {
+ leaf char-string {
+ type string {
+ length "1..45";
+ pattern '[ -~]*';
+ }
+ description
+ "RFC2579 DisplayString, except that the character codes
+ 0-31 (decimal) are not used.";
+ }
+ }
+ case unsigned-int16 {
+ leaf unsigned-int16 {
+ type uint16;
+ description
+ "2-octet integer.";
+ }
+ }
+ case rfc2865-vpn-id {
+ container vpn-id {
+ description
+ "RFC2685 VPN ID. 3 octet VPN authority Organizationally
+ Unique Identifier followed by 4 octet VPN index identifying
+ VPN according to the OUI.";
+ leaf vpn-oui {
+ type uint32 {
+ range "0..16777215";
+ }
+ mandatory true;
+ description
+ "3 octet VPN authority Organizationally Unique
+ Identifier.";
+ }
+ leaf vpn-index {
+ type uint32;
+ mandatory true;
+ description
+ "4 octet VPN index identifying VPN according to OUI.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping management-address-grouping {
+ description
+ "Defines the Management Address.";
+ reference
+ "21.5.3.5 of IEEE Std 802.1Q-2018";
+
+ leaf domain {
+ type yang:object-identifier-128;
+ description
+ "The domain type.";
+ }
+
+ choice management-address {
+ when "./domain";
+ mandatory true;
+ description
+ "Selects the management address";
+
+ case ip {
+ description
+ "Represents an IP TCP, UDP, or SCTP transport
+ address consisting of an IPv4/v6 address, and a port
+ number, associated with the domain type defined by the
+ domain leaf node.";
+
+ leaf ip-address {
+ type inet:ip-address;
+ mandatory true;
+ description
+ "IPv4 or IPv6 address.";
+ }
+ leaf ip-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "IP port.";
+ }
+ }
+
+ case local {
+ leaf local-address {
+ type string {
+ length '1..255';
+ }
+ mandatory true;
+ description
+ "Represents a POSIX Local IPC transport address,
+ associated with the domain type defined by the
+ domain leaf node.";
+ }
+ }
+
+ case dns {
+ leaf dns-address {
+ type string {
+ length "1..255";
+ }
+ mandatory true;
+ description
+ "The transport domain using fully qualified domain
+ names, associated with the domain type defined by the
+ domain leaf node. Represents a DNS domain name followed
+ by a colon ':' (ASCII character 0x3A) and a port number
+ in ASCII. The name SHOULD be fully qualified whenever
+ possible.";
+ }
+ }
+
+ case other {
+ leaf unknown-address {
+ type binary {
+ length "1..255";
+ }
+ description
+ "This represents an undefined address, for the case when
+ the domain type provided is an unrecognizable value.";
+ }
+ }
+ }
+ }
+
+ grouping loopback-input-grouping {
+ description
+ "Defines the group of loopback input parameters.";
+ choice lbm-destination {
+ mandatory true;
+ description
+ "Selects the destination type (which is
+ either MEP identifier or MAC address) used
+ for the Loopback transmissions.";
+ case dest-ucast-mac-address {
+ description
+ "The target unicast MAC Address field to be
+ transmitted. A unicast destination MAC address.";
+ leaf lbm-dest-ucast-mac-address {
+ type cfm-types:unicast-mac-address-type;
+ description
+ "The target MAC Address field to be transmitted.
+ A unicast destination MAC address.";
+ reference
+ "12.14.7.3.2b of IEEE Std 802.1Q-2018";
+ }
+ }
+ case dest-mcast-class1-mac-address {
+ description
+ "The target multicast Class 1 MAC address field to be
+ transmitted.";
+ leaf lbm-dest-mcast-class1-mac-address {
+ type cfm-types:multicast-class1-mac-address-type;
+ description
+ "The target multicast Class 1 MAC address field to
+ be transmitted";
+ }
+ }
+ case dest-mep-id {
+ description
+ "The identifier of a remote MEP in the same MA to
+ which the LBM is to be sent.";
+ leaf lbm-dest-mep-id {
+ type cfm-types:mep-id-type;
+ description
+ "The identifier of a remote MEP in the same MA to
+ which the LBM is to be sent.";
+ reference
+ "12.14.7.3.2b of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ leaf lbm-messages {
+ type uint16 {
+ range "1..1024";
+ }
+ default 1;
+ description
+ "The number of Loopback messages to be transmitted.";
+ reference
+ "12.14.7.3.2c of IEEE Std 802.1Q-2018";
+ }
+ leaf lbm-priority {
+ type dot1q-types:priority-type;
+ default 7;
+ description
+ "Priority. 3 bit value to be used in the VLAN tag, if
+ present in the transmitted frame. The default value should
+ be priority 7, which is the default CCM priority
+ (ccm-ltm-priority).";
+ reference
+ "12.14.7.3.2e of IEEE Std 802.1Q-2018";
+ }
+ leaf lbm-drop-eligible {
+ type boolean;
+ default "false";
+ description
+ "Drop eligible bit value to be used in the VLAN tag, if
+ present in the transmitted frame. A value 'true' means
+ inserting value '1' in the DEI field, while a value
+ 'false' means inserting value '0' in the DEI field.";
+ reference
+ "12.14.7.3.2e of IEEE Std 802.1Q-2018";
+ }
+ leaf lbm-data-tlv {
+ type cfm-types:lbm-data-tlv-type;
+ description
+ "An arbitrary amount of data to be included in the
+ Data TLV, if the Data TLV is selected to be sent.";
+ reference
+ "12.14.7.3.2d of IEEE Std 802.1Q-2018";
+ }
+ }
+
+ grouping linktrace-input-grouping {
+ description
+ "Defines the group of linktrace input parameters. By default,
+ the priority used is that of the CCMs (ccm-ltm-priority)
+ and the drop eligibility is false. ";
+ choice ltr-target {
+ mandatory true;
+ description
+ "Selects the target address type (which is
+ either MEP identifier or MAC address) used
+ for the Linktrace transmissions.";
+ case target-ucast-mac-address {
+ description
+ "The target MAC address field to be transmitted. A
+ unicast MAC address.";
+ leaf ltm-target-mac-address {
+ type cfm-types:unicast-mac-address-type;
+ description
+ "The target MAC address field to be transmitted.
+ A unicast MAC address.";
+ reference
+ "12.14.7.4.2c of IEEE Std 802.1Q-2018";
+ }
+ }
+ case target-mep-id {
+ description
+ "The MEP identifier of another MEP in the same MA.";
+ leaf ltm-target-mep-id {
+ type cfm-types:mep-id-type;
+ description
+ "The MEP identifier of another MEP in the same MA.";
+ reference
+ "12.14.7.4.2c of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ leaf ltm-ttl {
+ type uint8 {
+ range "0..255";
+ }
+ default 64;
+ description
+ "The LTM TTL field. Indicates the number of hops
+ remaining to the LTM. Decremented by 1 by each
+ Linktrace Responder that handles the LTM. The value
+ returned in the LTR is one less than that received in
+ the LTM. If the LTM TTL is 0 or 1, the LTM is not
+ forwarded to the next hop, and if 0, no LTR is
+ generated.";
+ reference
+ "12.14.7.4.2d, 21.8.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltm-flags {
+ type cfm-types:mep-tx-ltm-flags-type;
+ default '';
+ description
+ "The flags field for the LTMs transmitted by the MEP.";
+ reference
+ "12.14.7.4.2b, 20.42.1 of IEEE Std 802.1Q-2018";
+
+ }
+ }
+
+ grouping ltm-egress-identifier-grouping {
+ description
+ "The grouping used to identify the MEP Linktrace
+ initiator that is originating the LTM. It defines
+ the MAC address and uint type definition.";
+ leaf int {
+ type uint16;
+ mandatory true;
+ description
+ "A value used to uniquely identify the MEP
+ Linktrace Initiator or Linktrace Responder within
+ that system.";
+ }
+ leaf address {
+ type ieee:mac-address;
+ mandatory true;
+ description
+ "A 48-bit IEEE MAC address unique to the system in
+ which the MEP Linktrace Initiator or Linktrace
+ Responder resides.";
+ }
+ }
+
+
+ /* ---------------------------------------------------
+ * Configuration objects used by 802.1Qcx YANG module
+ * ---------------------------------------------------
+ */
+
+ container cfm {
+ description
+ "Connectivity Fault Management configuration and operational
+ information.";
+
+ list maintenance-domain {
+ key "md-id";
+ description
+ "Contains the Maintenance Domain configuration and
+ operational data. A Maintenance Domain is the network or the
+ part of the network for which faults in connectivity can be
+ managed. The boundary of a Maintenance Domain is defined by
+ a set of Domain Service Access Points (DoSAPs), each of
+ which can become a point of connectivity to a service
+ instance.";
+ leaf md-id {
+ type cfm-types:name-key-type;
+ description
+ "The index to the Maintenance Domain list.";
+ }
+ uses md-name-choice-grouping;
+ leaf md-level {
+ type cfm-types:md-level-type;
+ default 0;
+ description
+ "The Maintenance Domain level.";
+ reference
+ "3.122, 12.14.5.1.3b of IEEE Std 802.1Q-2018";
+ }
+ leaf mhf-creation {
+ type cfm-types:mhf-creation-type;
+ must '. != "mhf-defer"' {
+ description
+ "The value mhf-defer is not allowed";
+ }
+ default mhf-none;
+ description
+ "Value indicating whether the management entity can
+ create MHFs (MIP Half Function) for this Maintenance
+ Domain. Since there is no encompassing Maintenance
+ Domain, the value mhf-defer is not allowed.";
+ reference
+ "3.122, 12.14.5.1.3c of IEEE Std 802.1Q-2018";
+ }
+ leaf id-permission {
+ type cfm-types:sender-id-permission-type;
+ must '. != "send-id-defer"' {
+ description
+ "The value send-id-defer is not allowed";
+ }
+ default send-id-none;
+ description
+ "Value indicating what, if anything, is to be included in
+ the Sender ID TLV transmitted by Maintenance Points
+ configured in this Maintenance Domain. Since there is no
+ encompassing Maintenance Domain, the value send-id-defer
+ is not allowed.";
+ reference
+ "3.122, 12.14.5.1.3d of IEEE Std 802.1Q-2018";
+ }
+ leaf fault-alarm-transmission {
+ type cfm-types:fault-alarm-type;
+ default "not-transmitted";
+ description
+ "A value indicating whether Fault Alarms are to be
+ transmitted or not. The default is not transmit.";
+ reference
+ "3.122, 12.14.5.1.3e of IEEE Std 802.1Q-2018";
+ }
+
+ list maintenance-association {
+ key "ma-id";
+ description
+ "Provides configuration and operational data for the
+ Maintenance Associations. A Maintenance Association is a
+ set of MEPs, each configured with the same MAID and MD
+ level, established to verify the integrity of a single
+ service instance. A Maintenance Association can be thought
+ of as a full mesh of Maintenance Entities among a set of
+ MEPs so configured.";
+ leaf ma-id {
+ type cfm-types:name-key-type;
+ description
+ "Key of the Maintenance Association list of entries.";
+ }
+ uses ma-name-choice-grouping;
+ leaf ccm-interval {
+ type cfm-types:ccm-interval-type;
+ default "1sec";
+ description
+ "The interval between CCM transmissions to be used by all
+ MEPs in the Maintenance Association.";
+ reference
+ "12.14.6.1.3e of IEEE Std 802.1Q-2018";
+ }
+ leaf fault-alarm-transmission {
+ type cfm-types:fault-alarm-type;
+ description
+ "A value indicating whether Fault Alarms are to be
+ transmitted or not. If this leaf node is not present
+ then the disposition of the fault-alarm
+ used by the MD should be used.";
+ reference
+ "3.122, 12.14.5.1.3e of IEEE Std 802.1Q-2018";
+ }
+ leaf mhf-creation {
+ type cfm-types:mhf-creation-type;
+ default mhf-defer;
+ description
+ "Value indicating whether the management entity can
+ create MHFs (MIP Half Function) for this Maintenance
+ Association.";
+ reference
+ "3.122, 12.14.5.1.3c of IEEE Std 802.1Q-2018";
+ }
+ leaf id-permission {
+ type cfm-types:sender-id-permission-type;
+ default "send-id-defer";
+ description
+ "Enumerated value indicating what, if anything, is to
+ be included in the Sender ID TLV (21.5.3) transmitted
+ by MPs configured in this MA.";
+ reference
+ "12.14.3.1.3d of IEEE Std 802.1Q-2018";
+ }
+
+ list maintenance-association-mep {
+ key mep-id;
+ description
+ "The list of all MEPs that belong to this Maintenance
+ Association.";
+ leaf mep-id {
+ type cfm-types:mep-id-type;
+ description
+ "Integer that is unique among all the MEPs in the
+ same Maintenance Association.";
+ reference
+ "12.14.6.1.3g of IEEE Std 802.1Q-2018";
+ }
+ } // maintenance-association-mep-list
+ } // maintenance-association
+ } // maintenance-domain
+
+ list maintenance-group {
+ key "maintenance-group-id";
+ description
+ "The list of maintenance association groups, which are
+ uniquely associated with a maintenance domain, maintenance
+ association, for which the MEPs belong.";
+ leaf maintenance-group-id {
+ type cfm-types:name-key-type;
+ description
+ "The maintenance group provides a handle
+ for the MD and MA combination.";
+ }
+ leaf md-id {
+ type leafref {
+ path '/cfm/maintenance-domain/md-id';
+ }
+ mandatory true;
+ description
+ "A reference to the maintenance domain that this
+ maintenance group is associated with.";
+ }
+ leaf ma-id {
+ type leafref {
+ path '/cfm'
+ + '/maintenance-domain[md-id = current()/../md-id]'
+ + '/maintenance-association/ma-id';
+ }
+ mandatory true;
+ description
+ "A reference to the maintenance association in the
+ specified maintenance domain, that this maintenance group
+ is associated with.";
+ }
+
+ list mep {
+ key "mep-id";
+ description
+ "A list of local Maintenance association End Points (MEPs).
+ A MEP is an actively managed CFM entity, associated with
+ a specific DoSAP of a service instance, which can
+ generate and receive CFM PDUs and track any responses.
+ It is an end point of a single Maintenance Association
+ (MA) and is an end point of a separate Maintenance
+ Entity for each of the other MEPs in the same MA.";
+ leaf mep-id {
+ type leafref {
+ path '/cfm/maintenance-domain'
+ + '[md-id = current()/../../md-id]'
+ + '/maintenance-association'
+ + '[ma-id = current()/../../ma-id]'
+ + '/maintenance-association-mep'
+ + '/mep-id';
+ }
+ description
+ "Integer that is unique among all the MEPs in the
+ same Maintenance Association.";
+ reference
+ "3.114, 12.14.7, 19.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf direction {
+ type cfm-types:mp-direction-type;
+ mandatory true;
+ description
+ "The direction in which the MEP faces on the Bridge
+ Port. Example, up or down.";
+ reference
+ "12.14.7.1.3c, 19.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf enabled {
+ type boolean;
+ default "false";
+ description
+ "The administrative state of the MEP. TRUE indicates
+ that the MEP is to functional normally, and FALSE
+ indicates that it is to cease functioning.";
+ reference
+ "12.14.7.1.3e, 20.9.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf ccm-ltm-priority {
+ type dot1q-types:priority-type;
+ default 7;
+ description
+ "The priority value for CCMs and LTMs transmitted by
+ the MEP. The default value is the highest priority
+ allowed to pass through the Bridge Port for any of
+ the MEPs VID(s).";
+ reference
+ "12.14.7.1.3h of IEEE Std 802.1Q-2018";
+ }
+ leaf mac-address {
+ type ieee:mac-address;
+ config false;
+ mandatory true;
+ description
+ "The MAC address of the MEP.";
+ reference
+ "12.14.7.1.3i, 19.4 of IEEE Std 802.1Q-2018";
+ }
+ list inactive-remote-mep {
+ key inactive-rmep-id;
+ description
+ "A list indicating which of the remote MEPs in the same
+ MA are inactive. The Remote MEP state machines (20.20)
+ are instantiated only for the remote MEPs which are
+ present in the maintenance-association-mep-list, but
+ not in this list. By default, all configured remote
+ MEPs in the same MA are active";
+ leaf inactive-rmep-id {
+ type leafref {
+ path '/cfm/maintenance-domain'
+ + '[md-id = current()/../../../md-id]'
+ + '/maintenance-association'
+ + '[ma-id = current()/../../../ma-id]'
+ + '/maintenance-association-mep'
+ + '/mep-id';
+ }
+ description
+ "Maintenance association Endpoint Identifier of a
+ remote MEP for which the Remote MEP state machine
+ should not be instantiated.";
+ reference
+ "12.14.7.1.3ae of IEEE Std 802.1Q-2018";
+ }
+ } //inactive-remote-mep
+
+ list mep-db {
+ key rmep-id;
+ config false;
+ description
+ "The MEP CCM Database. A database, maintained by every
+ MEP, that maintains received information about other MEPs
+ in the Maintenance Association.";
+ leaf rmep-id {
+ type cfm-types:mep-id-type;
+ description
+ "Maintenance association Endpoint Identifier of a
+ remote MEP whose information from the MEP Database
+ is to be returned.";
+ reference
+ "12.14.7.6.2b of IEEE Std 802.1Q-2018";
+ }
+ leaf rmep-state {
+ type cfm-types:remote-mep-state-type;
+ mandatory true;
+ description
+ "The operational state of the remote MEP state
+ machine";
+ reference
+ "12.14.7.6.3b, 20.20 of IEEE Std 802.1Q-2018";
+ }
+ leaf rmep-failed-ok-time {
+ type yang:timeticks;
+ mandatory true;
+ description
+ "The time (SysUpTime) at which the Remote MEP state
+ machine last entered either the RMEP_FAILED or
+ RMEP_OK state";
+ reference
+ "12.14.7.6.3c of IEEE Std 802.1Q-2018";
+ }
+ leaf mac-address {
+ type ieee:mac-address;
+ mandatory true;
+ description
+ "The MAC address of the remote MEP.";
+ reference
+ "12.14.7.6.3d, 20.19.7 of IEEE Std 802.1Q-2018";
+ }
+ leaf rdi {
+ type boolean;
+ mandatory true;
+ description
+ "State of the RDI bit in the last received CCM
+ (true for RDI=1), or false if none has been
+ received.";
+ reference
+ "12.14.7.6.3e, 20.19.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf port-status-tlv {
+ type cfm-types:port-status-tlv-value-type;
+ description
+ "An enumerated value of the Port status TLV
+ received in the last CCM from the remote MEP or
+ the default value no-port-state-tlv indicating
+ either no CCM has been received, or that no port
+ status TLV was received in the last CCM.";
+ reference
+ "12.14.7.6.3f, 20.19.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf interface-status-tlv {
+ type cfm-types:interface-status-tlv-value-type;
+ description
+ "An enumerated value of the Interface status TLV
+ received in the last CCM from the remote MEP or the
+ default value is-no-interface-status-tlv indicating
+ either no CCM has been received, or that no
+ interface status TLV was received in the last
+ CCM.";
+ reference
+ "12.14.7.6.3g, 20.19.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf chassis-id-subtype {
+ type ieee:chassis-id-subtype-type;
+ description
+ "This object specifies the format of the Chassis ID
+ received in the last CCM.";
+ reference
+ "12.14.7.6.3h, 21.5.3.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf chassis-id {
+ type ieee:chassis-id-type;
+ description
+ "The Chassis ID. The format of this object is
+ determined by the value of the
+ ltr-chassis-id-subtype object.";
+ reference
+ "12.14.7.6.3h, 21.5.3.3 of IEEE Std 802.1Q-2018";
+ }
+ container transport-service-domain {
+ description
+ "The transport management domain and address.";
+ uses management-address-grouping;
+ reference
+ "12.14.7.6.3h, 21.5.3.5, 21.5.3.7,
+ 21.6.7 of IEEE Std 802.1Q-2018";
+ }
+ leaf rmep-is-active {
+ type boolean;
+ default "true";
+ description
+ "A Boolean value stating if the remote MEP is
+ active.";
+ reference
+ "12.14.7.1.3ae";
+ }
+ } // mep-db
+
+ container continuity-check {
+ description
+ "Continuity check protocol";
+ leaf ccm-enabled {
+ type boolean;
+ default "false";
+ description
+ "Indicates whether the MEP can generate CCMs. If
+ TRUE, the MEP will generate CCM PDUs.";
+ reference
+ "12.14.7.1.3g, 20.10.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf fng-state {
+ type cfm-types:fng-state-type;
+ default "fng-reset";
+ config false;
+ description
+ "The current state of the MEP Fault Notification
+ Generator state machine.";
+ reference
+ "12.14.7.1.3f, 20.35 of IEEE Std 802.1Q-2018";
+ }
+ leaf fault-alarm-transmission {
+ type cfm-types:fault-alarm-type;
+ description
+ "A value indicating whether Fault Alarms are to be
+ transmitted or not. If this leaf is not specified,
+ the disposition of the fault-alarm used by the MD
+ should be used.";
+ reference
+ "3.122, 12.14.7.1.3j of IEEE Std 802.1Q-2018";
+ }
+ leaf lowest-priority-defect {
+ type cfm-types:lowest-alarm-priority-type;
+ default "mac-remote-error-xcon";
+ description
+ "The lowest priority defect that is allowed to
+ generate fault alarms.";
+ reference
+ "12.14.7.1.3k, 20.9.5 of IEEE Std 802.1Q-2018";
+ }
+ leaf fng-alarm-time {
+ type uint16 {
+ range "2500..10000";
+ }
+ units milliseconds;
+ default 2500;
+ description
+ "The time that defect must be present before a Fault
+ Alarm is issued.";
+ reference
+ "12.14.7.1.3l, 20.35.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf fng-reset-time {
+ type uint16 {
+ range "2500..10000";
+ }
+ units milliseconds;
+ default 10000;
+ description
+ "The time that defects must be absent before
+ resetting a Fault Alarm.";
+ reference
+ "12.14.7.1.3m, 20.35.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf highest-priority-defect {
+ type cfm-types:highest-defect-priority-type;
+ config false;
+ mandatory true;
+ description
+ "The highest priority defect that has been present
+ since the MEPs Fault Notification Generator state
+ machine was last in the FNG_RESET state.";
+ reference
+ "12.14.7.1.3n, 20.35.9 of IEEE Std 802.1Q-2018";
+ }
+ leaf defects {
+ type cfm-types:mep-defects-type;
+ config false;
+ mandatory true;
+ description
+ "Vector of boolean error conditions";
+ reference
+ "12.14.7.1.3o-s, 20.21.3,
+ 20.23.3, 20.35.5, 20.35.6, 20.35.7 of IEEE Std
+ 802.1Q-2018";
+ }
+ leaf error-ccm-last-failure {
+ type binary {
+ length "1..128";
+ }
+ config false;
+ description
+ "The last received CCM that triggered a def-error-ccm
+ fault.";
+ reference
+ "12.14.7.1.3t, 20.21.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf xcon-ccm-last-failure {
+ type binary {
+ length "1..128";
+ }
+ config false;
+ description
+ "The last received CCM that triggered a def-xcon-ccm
+ fault.";
+ reference
+ "12.14.7.1.3u, 20.23.2 of IEEE Std 802.1Q-2018";
+ }
+ } // continuity-check
+
+ container stats {
+ config false;
+ description
+ "Contains the counters associated with the MEP.";
+ leaf mep-ccm-sequence-errors {
+ type yang:counter64;
+ mandatory true;
+ description
+ "The total number of out-of-sequence CCMs received
+ from all remote MEPs.";
+ reference
+ "12.14.7.1.3v, 20.16.12 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-ccms-sent {
+ type yang:counter64;
+ mandatory true;
+ description
+ "Total number of CCMs transmitted";
+ reference
+ "12.14.7.1.3w, 20.10.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-lbr-in {
+ type yang:counter64;
+ mandatory true;
+ description
+ "Total number of valid, in-order Loopback Replies
+ received.";
+ reference
+ "12.14.7.1.3y, 20.31.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-lbr-in-out-of-order {
+ type yang:counter64;
+ mandatory true;
+ description
+ "The total number of valid, out-of-order
+ Loopback Replies received";
+ reference
+ "12.14.7.1.3z, 20.31.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-lbr-bad-msdu {
+ type yang:counter64;
+ mandatory true;
+ description
+ "The total number of LBRs received whose
+ mac_service_data_unit did not match (except for the
+ OpCode) that of the corresponding LBM.";
+ reference
+ "12.14.7.1.3aa, 20.2.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-unexpected-ltr-in {
+ type yang:counter64;
+ mandatory true;
+ description
+ "The total number of unexpected LTRs received.";
+ reference
+ "12.14.7.1.3ac, 20.44.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf mep-lbr-out {
+ type yang:counter64;
+ mandatory true;
+ description
+ "Total number of Loopback Replies transmitted.";
+ reference
+ "12.14.7.1.3ad, 20.28.2 of IEEE Std 802.1Q-2018";
+ }
+ } // stats
+
+ action transmit-loopback {
+ description
+ "To signal to the MEP to transmit some number of LBMs.
+ Accepting the action means the device will transmit LBM
+ messages according the input leaf nodes.";
+ input {
+ uses loopback-input-grouping;
+ } // input
+ output {
+ leaf lbm-request-id {
+ type cfm-types:seq-number-type;
+ mandatory true;
+ description
+ "The Loopback transaction identifier of the first
+ LBM (to be) sent.";
+ reference
+ "12.14.7.3.3b of IEEE Std 802.1Q-2018";
+ }
+ } // output
+ } // transmit-loopback
+
+ action transmit-linktrace {
+ description
+ "To signal to the MEP to transmit an LTM and to create
+ an LTM entry in the MEPs Linktrace Database. Accepting
+ the action means the device will transmit LTM messages
+ according to the input leafs. The outcome of sending
+ these LTM messages will be reported through the list
+ 'linktrace-reply'.";
+ input {
+ uses linktrace-input-grouping;
+ } // input
+ output {
+ leaf ltm-transaction-id {
+ type cfm-types:seq-number-type;
+ mandatory true;
+ description
+ "The LTM transaction identifier
+ of the LTM sent. The value returned is undefined
+ if and RPC error is returned.";
+ reference
+ "12.14.7.4.3b of IEEE Std 802.1Q-2018";
+ }
+ container ltm-egress-identifier {
+ uses ltm-egress-identifier-grouping;
+ description
+ "Identifies the MEP Linktrace Initiator that is
+ originating this LTM.
+
+ The low-order six octets contain a 48-bit IEEE MAC
+ address unique to the system in which the MEP
+ Linktrace Initiator or Linktrace Responder resides.
+ The high-order two octets contain a value sufficient
+ to uniquely identify the MEP Linktrace Initiator or
+ Linktrace Responder within that system.
+
+ For most Bridges, the address of any MAC attached to
+ the Bridge will suffice for the low-order six octets,
+ and 0 for the high-order octets. In some situations,
+ e.g., if multiple virtual Bridges utilizing emulated
+ LANs are implemented in a single physical system, the
+ high-order two octets can be used to differentiate
+ among the transmitting entities.
+
+ The value returned is undefined if the
+ transmit-linktrace input action was not accepted.";
+ reference
+ "12.14.7.4.3c of IEEE Std 802.1Q-2018";
+ }
+ } // output
+ } // transmit-linktrace
+
+ list linktrace-reply {
+ key "ltr-transaction-id";
+ config false;
+ description
+ "This list extends the MEP table and reports on accepted
+ transmit-linktrace actions. In case linktrace replies
+ are received it also reports with data from the received
+ Linktrace reply messages.";
+ leaf ltr-transaction-id {
+ type cfm-types:seq-number-type;
+ description
+ "Transaction identifier returned by a previous
+ transmit linktrace message command, indicating
+ which LTMs response is going to be returned.";
+ reference
+ "12.14.7.5.2b of IEEE Std 802.1Q-2018";
+ }
+ container linktrace-input {
+ description
+ "The linktrace parameter input. By default, the
+ priority used is that of the CCMs (ccm-ltm-priority)
+ and the drop elibility is false.";
+ uses linktrace-input-grouping;
+ }
+ list responses {
+ key "ltr-receive-order";
+ description
+ "The responses associated with the request.";
+ leaf ltr-receive-order {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "An index to distinguish among multiple LTRs with
+ the same LTR Transaction Identifier field value.
+ Assigned sequentially from 1, in the order that the
+ Linktrace Initiator received the LTRs.";
+ }
+ leaf ltr-ttl {
+ type uint8 {
+ range "0..255";
+ }
+ mandatory true;
+ description
+ "TTL field value for a returned LTR.";
+ reference
+ "12.14.7.5, 20.41.2.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-forwarded {
+ type boolean;
+ mandatory true;
+ description
+ "Indicates if an LTM was forwarded by the responding
+ MP, as returned in the FwdYes flag of the flags
+ field.";
+ reference
+ "12.14.7.5.3c, 20.41.2.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-terminal-mep {
+ type boolean;
+ mandatory true;
+ description
+ "A Boolean value stating whether the forwarded LTM
+ reached a MEP enclosing its MA, as returned in the
+ Terminal MEP flag of the Flags field";
+ reference
+ "12.14.7.5.3d, 20.41.2.1 of IEEE Std 802.1Q-2018";
+ }
+ container ltr-last-egress-identifier {
+ description
+ "An octet field holding the Last Egress Identifier
+ returned in the LTR Egress Identifier TLV of the
+ LTR. The Last Egress Identifier identifies the MEP
+ Linktrace Initiator that originated, or the
+ Linktrace Responder that forwarded, the LTM to
+ which this LTR is the response. This is the same
+ value as the Egress Identifier TLV of that LTM.";
+ uses ltm-egress-identifier-grouping;
+ reference
+ "12.14.7.5.3e, 20.41.2.3 of IEEE Std 802.1Q-2018";
+ }
+ container ltr-next-egress-identifier {
+ description
+ "An octet field holding the Next Egress Identifier
+ returned in the LTR Egress Identifier TLV of the
+ LTR. The Next Egress Identifier Identifies the
+ Linktrace Responder that transmitted this LTR, and
+ can forward the LTM to the next hop. This is the
+ same value as the Egress Identifier TLV of the
+ forwarded LTM, if any. If the FwdYes bit of the
+ Flags field is false, the contents of this field
+ are undefined, i.e., any value can be transmitted,
+ and the field is ignored by the receiver.";
+ uses ltm-egress-identifier-grouping;
+ reference
+ "12.14.7.5.3f, 20.41.2.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-relay {
+ type cfm-types:relay-action-field-value-type;
+ mandatory true;
+ description
+ "Value returned in the Relay Action field.";
+ reference
+ "12.14.7.5.3g, 20.41.2.5 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-chassis-id-subtype {
+ type ieee:chassis-id-subtype-type;
+ description
+ "Specifies the format of the Chassis ID returned
+ in the Sender ID TLV of the LTR, if any. This leaf
+ is not present if the LTR did not contain a Sender
+ ID TLV or if the Sender ID TLV did not contain a
+ Chassis ID.";
+ reference
+ "12.14.7.5.3h, 21.5.3.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-chassis-id {
+ when "../ltr-chassis-id-subtype";
+ type ieee:chassis-id-type;
+ mandatory true;
+ description
+ "The Chassis ID returned in the Sender ID TLV of
+ the LTR, if any. The format of this object is
+ determined by the value of the
+ ltr-chassis-id-subtype object. This leaf is not
+ present if the LTR did not contain a Sender ID TLV
+ or if the Sender ID TLV did not contain a Chassis
+ ID.";
+ reference
+ "12.14.7.5.3i, 21.5.3.2 of IEEE Std 802.1Q-2018";
+ }
+ container ltr-transport-service-domain {
+ description
+ "The transport management domain and address. This
+ container is empty if the LTR did not contain a
+ Sender ID TLV or if the Sender ID TLV did not
+ contain a Management Address.";
+ uses management-address-grouping;
+ reference
+ "12.14.7.5.3j, 21.5.3.5, 21.5.3.7,
+ 21.9.6 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-ingress {
+ type cfm-types:ingress-action-field-value-type;
+ description
+ "The value returned in the Ingress Action Field of
+ the LTM. This leaf is not present if no
+ Reply Ingress TLV was returned in the LTM.";
+ reference
+ "12.14.7.5.3k, 20.41.2.6 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-ingress-mac {
+ when "../ltr-ingress";
+ type ieee:mac-address;
+ mandatory true;
+ description
+ "MAC address returned in the ingress MAC address
+ field. This leaf is not present if the ltr-ingress
+ leaf is not present.";
+ reference
+ "12.14.7.5.3l, 20.41.2.7 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-ingress-port-id-subtype {
+ when "../ltr-ingress";
+ type ieee:port-id-subtype-type;
+ description
+ "Format of the ingress Port ID. This leaf is not
+ present if the ltr-ingress leaf is not present, or if
+ the Reply Ingress TLV did not contain a Port ID.";
+ reference
+ "12.14.7.5.3m, 20.41.2.8 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-ingress-port-id {
+ when '../ltr-ingress and '+
+ '../ltr-ingress-port-id-subtype';
+ type ieee:port-id-type;
+ mandatory true;
+ description
+ "Ingress Port ID. The format of this object is
+ determined by the value of the
+ ltr-ingress-port-id-subtype object. This leaf is
+ not present if the ltr-ingress leaf or the
+ ltr-ingress-port-id-subtype leaf are not present.";
+ reference
+ "12.14.7.5.3n, 20.41.2.9 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-egress {
+ type cfm-types:egress-action-field-value-type;
+ description
+ "The value returned in the Egress Action Field of
+ the LTM. The node is not present if
+ no Reply Egress TLV was returned in the LTM.";
+ reference
+ "12.14.7.5.3o, 20.41.2.10 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-egress-mac {
+ when '../ltr-egress';
+ type ieee:mac-address;
+ mandatory true;
+ description
+ "MAC address returned in the egress MAC address
+ field. This leaf is not present if the ltr-egress
+ leaf is not present.";
+ reference
+ "12.14.7.5.3p, 20.41.2.11 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-egress-port-id-subtype {
+ when '../ltr-egress';
+ type ieee:port-id-subtype-type;
+ description
+ "Format of the egress Port ID. This leaf is not
+ present if the ltr-egress leaf is not present, or if
+ the Reply Egress TLV did not contain a Port ID.";
+ reference
+ "12.14.7.5.3q, 20.41.2.12 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-egress-port-id {
+ when '../ltr-egress and '+
+ '../ltr-egress-port-id-subtype';
+ type ieee:port-id-type;
+ mandatory true;
+ description
+ "Egress Port ID. The format of this object is
+ determined by the value of the
+ ltr-egress-port-id-subtype object. This leaf is not
+ present if the ltr-egress leaf or the
+ ltr-egress-port-id-subtype leaf are not present.";
+ reference
+ "12.14.7.5.3r, 20.41.2.13 of IEEE Std 802.1Q-2018";
+ }
+ leaf ltr-organization-specific-tlv {
+ type binary {
+ length "0 | 4..1500";
+ }
+ description
+ "All Organization specific TLVs returned in the
+ LTR, if any. Includes all octets including and
+ following the TLV Length field of each TLV,
+ concatenated together.";
+ reference
+ "12.14.7.5.3s, 21.5.2 of IEEE Std 802.1Q-2018";
+ }
+ }
+ } // linktrace-reply
+ } // mep
+ } // maintenance-group
+ } // cfm
+
+} // ieee802-dot1q-cfm
\ No newline at end of file
--- /dev/null
+module ieee802-dot1q-types {
+ namespace urn:ieee:std:802.1Q:yang:ieee802-dot1q-types;
+ prefix dot1q-types;
+ import ietf-yang-types {
+ prefix yang;
+ }
+ organization
+ "IEEE 802.1 Working Group";
+ contact
+ "WG-URL: http://ieee802.org/1/
+ WG-EMail: stds-802-1-l@ieee.org
+
+ Contact: IEEE 802.1 Working Group Chair
+ Postal: C/O IEEE 802.1 Working Group
+ IEEE Standards Association
+ 445 Hoes Lane
+ Piscataway, NJ 08854
+ USA
+
+ E-mail: stds-802-1-chairs@ieee.org";
+ description
+ "Common types used within dot1Q-bridge modules.";
+ revision 2020-06-04 {
+ description
+ "Published as part of IEEE Std 802.1Qcx-2020.
+ Second version.";
+ reference
+ "IEEE Std 802.1Qcx-2020, Bridges and Bridged Networks -
+ YANG Data Model for Connectivity Fault Management.";
+ }
+ revision 2018-03-07 {
+ description
+ "Published as part of IEEE Std 802.1Q-2018.
+ Initial version.";
+ reference
+ "IEEE Std 802.1Q-2018, Bridges and Bridged Networks.";
+ }
+
+ identity dot1q-vlan-type {
+ description
+ "Base identity from which all 802.1Q VLAN tag types are derived
+ from.";
+ }
+ identity c-vlan {
+ base dot1q-vlan-type;
+ description
+ "An 802.1Q Customer VLAN, using the 81-00 EtherType";
+ reference
+ "5.5 of IEEE Std 802.1Q-2018";
+ }
+ identity s-vlan {
+ base dot1q-vlan-type;
+ description
+ "An 802.1Q Service VLAN, using the 88-A8 EtherType originally
+ introduced in 802.1ad, and incorporated into 802.1Q (2011)";
+ reference
+ "5.6 of IEEE Std 802.1Q-2018";
+ }
+ typedef name-type {
+ type string {
+ length "0..32";
+ }
+ description
+ "A text string of up to 32 characters, of locally determined
+ significance.";
+ }
+ typedef port-number-type {
+ type uint32 {
+ range "1..65535";
+ }
+ description
+ "The port number of the Bridge port for which this entry
+ contains Bridge management information.";
+ }
+ typedef priority-type {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "A range of priorities from 0 to 7 (inclusive). The Priority
+ Code Point (PCP) is a 3-bit field that refers to the class of
+ service associated with an 802.1Q 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.";
+ }
+ typedef vid-range-type {
+ type string {
+ pattern
+ "([1-9]"+
+ "[0-9]{0,3}"+
+ "(-[1-9][0-9]{0,3})?"+
+ "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)";
+ }
+ description
+ "A list of VLAN Ids, or non overlapping VLAN ranges, in
+ ascending order, between 1 and 4094.
+
+ This type is used to match an ordered list of VLAN Ids, or
+ contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the
+ range 1 to 4094, and included in the list in non overlapping
+ ascending order.
+
+ For example: 1,10-100,250,500-1000";
+ }
+ typedef vlanid {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The vlanid type uniquely identifies a VLAN. This is the 12-bit
+ VLAN-ID used in the VLAN Tag header. The range is defined by the
+ referenced specification. This type is in the value set and its
+ semantics equivalent to the VlanId textual convention of the
+ SMIv2.";
+ }
+ typedef vlan-index-type {
+ type uint32 {
+ range "1..4094 | 4096..4294967295";
+ }
+ description
+ "A value used to index per-VLAN tables. Values of 0 and 4095 are
+ not permitted. The range of valid VLAN indices. If the value is
+ greater than 4095, then it represents a VLAN with scope local to
+ the particular agent, i.e., one without a global VLAN-ID
+ assigned to it. Such VLANs are outside the scope of IEEE 802.1Q,
+ but it is convenient to be able to manage them in the same way
+ using this YANG module.";
+ reference
+ "9.6 of IEEE Std 802.1Q-2018";
+ }
+ typedef mstid-type {
+ type uint32 {
+ range "1..4094";
+ }
+ description
+ "In an MSTP Bridge, an MSTID, i.e., a value used to identify a
+ spanning tree (or MST) instance";
+ reference
+ "13.8 of IEEE Std 802.1Q-2018";
+ }
+ typedef pcp-selection-type {
+ type enumeration {
+ enum 8P0D {
+ description
+ "8 priorities, 0 drop eligible";
+ }
+ enum 7P1D {
+ description
+ "7 priorities, 1 drop eligible";
+ }
+ enum 6P2D {
+ description
+ "6 priorities, 2 drop eligible";
+ }
+ enum 5P3D {
+ description
+ "5 priorities, 3 drop eligible";
+ }
+ }
+ description
+ "Priority Code Point selection types.";
+ reference
+ "12.6.2.5.3 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ typedef protocol-frame-format-type {
+ type enumeration {
+ enum Ethernet {
+ description
+ "Ethernet frame format";
+ }
+ enum rfc1042 {
+ description
+ "RFC 1042 frame format";
+ }
+ enum snap8021H {
+ description
+ "SNAP 802.1H frame format";
+ }
+ enum snapOther {
+ description
+ "Other SNAP frame format";
+ }
+ enum llcOther {
+ description
+ "Other LLC frame format";
+ }
+ }
+ description
+ "A value representing the frame format to be matched.";
+ reference
+ "12.10.1.7.1 of IEEE Std 802.1Q-2018";
+ }
+ typedef ethertype-type {
+ type string {
+ pattern "[0-9a-fA-F]{2}-[0-9a-fA-F]{2}";
+ }
+ description
+ "The EtherType value represented in the canonical order defined
+ by IEEE 802. The canonical representation uses uppercase
+ characters.";
+ reference
+ "9.2 of IEEE Std 802-2014";
+ }
+ typedef dot1q-tag-type {
+ type identityref {
+ base dot1q-vlan-type;
+ }
+ description
+ "Identifies a specific 802.1Q tag type";
+ reference
+ "IEEE Std 802.1Q-2018";
+ }
+ typedef traffic-class-type {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "This is the numerical value associated with a traffic class in
+ a Bridge. Larger values are associated with higher priority
+ traffic classes.";
+ reference
+ "3.239 of IEEE Std 802.1Q-2018";
+ }
+ grouping dot1q-tag-classifier-grouping {
+ description
+ "A grouping which represents an 802.1Q VLAN, matching both the
+ EtherType and a single VLAN Id.";
+ leaf tag-type {
+ type dot1q-tag-type;
+ mandatory true;
+ description
+ "VLAN type";
+ }
+ leaf vlan-id {
+ type vlanid;
+ mandatory true;
+ description
+ "VLAN Id";
+ }
+ }
+ grouping dot1q-tag-or-any-classifier-grouping {
+ description
+ "A grouping which represents an 802.1Q VLAN, matching both the
+ EtherType and a single VLAN Id or 'any' to match on any VLAN Id.";
+ leaf tag-type {
+ type dot1q-tag-type;
+ mandatory true;
+ description
+ "VLAN type";
+ }
+ leaf vlan-id {
+ type union {
+ type vlanid;
+ type enumeration {
+ enum any {
+ value 4095;
+ description
+ "Matches 'any' VLAN in the range 1 to 4094 that is not
+ matched by a more specific VLAN Id match";
+ }
+ }
+ }
+ mandatory true;
+ description
+ "VLAN Id or any";
+ }
+ }
+ grouping dot1q-tag-ranges-classifier-grouping {
+ description
+ "A grouping which represents an 802.1Q VLAN that matches a range
+ of VLAN Ids.";
+ leaf tag-type {
+ type dot1q-tag-type;
+ mandatory true;
+ description
+ "VLAN type";
+ }
+ leaf vlan-ids {
+ type vid-range-type;
+ mandatory true;
+ description
+ "VLAN Ids";
+ }
+ }
+ grouping dot1q-tag-ranges-or-any-classifier-grouping {
+ description
+ "A grouping which represents an 802.1Q VLAN, matching both the
+ EtherType and a single VLAN Id, ordered list of ranges, or 'any'
+ to match on any VLAN Id.";
+ leaf tag-type {
+ type dot1q-tag-type;
+ mandatory true;
+ description
+ "VLAN type";
+ }
+ leaf vlan-id {
+ type union {
+ type vid-range-type;
+ type enumeration {
+ enum any {
+ value 4095;
+ description
+ "Matches 'any' VLAN in the range 1 to 4094.";
+ }
+ }
+ }
+ mandatory true;
+ description
+ "VLAN Ids or any";
+ }
+ }
+ grouping priority-regeneration-table-grouping {
+ description
+ "The priority regeneration table provides the ability to map
+ incoming priority values on a per-Port basis, under management
+ control.";
+ reference
+ "6.9.4 of IEEE Std 802.1Q-2018";
+ leaf priority0 {
+ type priority-type;
+ default "0";
+ description
+ "Priority 0";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority1 {
+ type priority-type;
+ default "1";
+ description
+ "Priority 1";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority2 {
+ type priority-type;
+ default "2";
+ description
+ "Priority 2";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority3 {
+ type priority-type;
+ default "3";
+ description
+ "Priority 3";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority4 {
+ type priority-type;
+ default "4";
+ description
+ "Priority 4";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority5 {
+ type priority-type;
+ default "5";
+ description
+ "Priority 5";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority6 {
+ type priority-type;
+ default "6";
+ description
+ "Priority 6";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority7 {
+ type priority-type;
+ default "7";
+ description
+ "Priority 7";
+ reference
+ "12.6.2.3 of IEEE Std 802.1Q-2018
+ 6.9.4 of IEEE Std 802.1Q-2018";
+ }
+ }
+ grouping pcp-decoding-table-grouping {
+ description
+ "The Priority Code Point decoding table enables the decoding of
+ the priority and drop-eligible parameters from the PCP.";
+ reference
+ "6.9.3 of IEEE Std 802.1Q-2018";
+ list pcp-decoding-map {
+ key "pcp";
+ description
+ "This map associates the priority code point field found in
+ the VLAN to a priority and drop eligible value based upon the
+ priority code point selection type.";
+ leaf pcp {
+ type pcp-selection-type;
+ description
+ "The priority code point selection type.";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ list priority-map {
+ key "priority-code-point";
+ description
+ "This map associated a priority code point value to priority
+ and drop eligible parameters.";
+ leaf priority-code-point {
+ type priority-type;
+ description
+ "Priority associated with the pcp.";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority {
+ type priority-type;
+ description
+ "Priority associated with the pcp.";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf drop-eligible {
+ type boolean;
+ description
+ "Drop eligible value for pcp";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ }
+ grouping pcp-encoding-table-grouping {
+ description
+ "The Priority Code Point encoding table encodes the priority and
+ drop-eligible parameters in the PCP field of the VLAN tag.";
+ reference
+ "12.6.2.9 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ list pcp-encoding-map {
+ key "pcp";
+ description
+ "This map associated the priority and drop-eligible parameters
+ to the priority used to encode the PCP of the VLAN based upon
+ the priority code point selection type.";
+ leaf pcp {
+ type pcp-selection-type;
+ description
+ "The priority code point selection type.";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ list priority-map {
+ key "priority dei";
+ description
+ "This map associated the priority and drop-eligible
+ parameters to the priority code point field of the VLAN tag.";
+ leaf priority {
+ type priority-type;
+ description
+ "Priority associated with the pcp.";
+ reference
+ "12.6.2.7 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf dei {
+ type boolean;
+ description
+ "The drop eligible value.";
+ reference
+ "12.6.2 of IEEE Std 802.1Q-2018
+ 8.6.6 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority-code-point {
+ type priority-type;
+ description
+ "PCP value for priority when DEI value";
+ reference
+ "12.6.2.9 of IEEE Std 802.1Q-2018
+ 6.9.3 of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ }
+ grouping service-access-priority-table-grouping {
+ description
+ "The Service Access Priority Table associates a received
+ priority with a serice access priority.";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ leaf priority0 {
+ type priority-type;
+ default "0";
+ description
+ "Service access priority value for priority 0";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority1 {
+ type priority-type;
+ default "1";
+ description
+ "Service access priority value for priority 1";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority2 {
+ type priority-type;
+ default "2";
+ description
+ "Service access priority value for priority 2";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority3 {
+ type priority-type;
+ default "3";
+ description
+ "Service access priority value for priority 3";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority4 {
+ type priority-type;
+ default "4";
+ description
+ "Service access priority value for priority 4";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority5 {
+ type priority-type;
+ default "5";
+ description
+ "Service access priority value for priority 5";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority6 {
+ type priority-type;
+ default "6";
+ description
+ "Service access priority value for priority 6";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf priority7 {
+ type priority-type;
+ default "7";
+ description
+ "Service access priority value for priority 7";
+ reference
+ "12.6.2.17 of IEEE Std 802.1Q-2018
+ 6.13.1 of IEEE Std 802.1Q-2018";
+ }
+ }
+ grouping traffic-class-table-grouping {
+ description
+ "The Traffic Class Table models the operations that can be
+ performed on, or inquire about, the current contents of the
+ Traffic Class Table (8.6.6) for a given Port.";
+ reference
+ "12.6.3 of IEEE Std 802.1Q-2018
+ 8.6.6 of IEEE Std 802.1Q-2018";
+ list traffic-class-map {
+ key "priority";
+ description
+ "The priority index into the traffic class table.";
+ leaf priority {
+ type priority-type;
+ description
+ "The priority of the traffic class entry.";
+ reference
+ "8.6.6 of IEEE Std 802.1Q-2018";
+ }
+ list available-traffic-class {
+ key "num-traffic-class";
+ description
+ "The traffic class index associated with a given priority
+ within the traffic class table.";
+ reference
+ "8.6.6 of IEEE Std 802.1Q-2018";
+ leaf num-traffic-class {
+ type uint8 {
+ range "1..8";
+ }
+ description
+ "The available number of traffic classes.";
+ reference
+ "8.6.6 of IEEE Std 802.1Q-2018";
+ }
+ leaf traffic-class {
+ type traffic-class-type;
+ description
+ "The traffic class index associated with a given traffic
+ class entry.";
+ reference
+ "8.6.6 of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ }
+ grouping port-map-grouping {
+ description
+ "A set of control indicators, one for each Port. A Port Map,
+ containing a control element for each outbound Port";
+ reference
+ "8.8.1 of IEEE Std 802.1Q-2018
+ 8.8.2 of IEEE Std 802.1Q-2018";
+ list port-map {
+ key "port-ref";
+ description
+ "The list of entries composing the port map.";
+ leaf port-ref {
+ type port-number-type;
+ description
+ "The interface port reference associated with this map.";
+ reference
+ "8.8.1 of IEEE Std 802.1Q-2018";
+ }
+ choice map-type {
+ description
+ "Type of port map";
+ container static-filtering-entries {
+ description
+ "Static filtering entries attributes.";
+ leaf control-element {
+ type enumeration {
+ enum forward {
+ description
+ "Forwarded, independently of any dynamic filtering
+ information held by the FDB.";
+ }
+ enum filter {
+ description
+ "Filtered, independently of any dynamic filtering
+ information.";
+ }
+ enum forward-filter {
+ description
+ "Forwarded or filtered on the basis of dynamic
+ filtering information, or on the basis of the
+ default Group filtering behavior for the outbound
+ Port (8.8.6) if no dynamic filtering information is
+ present specifically for the MAC address.";
+ }
+ }
+ description
+ "containing a control element for each outbound Port,
+ specifying that a frame with a destination MAC address,
+ and in the case of VLAN Bridge components, VID that
+ meets this specification.";
+ reference
+ "8.8.1 of IEEE Std 802.1Q-2018";
+ }
+ leaf connection-identifier {
+ type port-number-type;
+ description
+ "A Port MAP may contain a connection identifier (8.8.12)
+ for each outbound port. The connection identifier may be
+ associated with the Bridge Port value maintained in a
+ Dynamic Filtering Entry of the FDB for Bridge Ports.";
+ reference
+ "8.8.1 of IEEE Std 802.1Q-2018
+ 8.8.12 of IEEE Std 802.1Q-2018";
+ }
+ }
+ container static-vlan-registration-entries {
+ description
+ "Static VLAN registration entries.";
+ leaf registrar-admin-control {
+ type enumeration {
+ enum fixed-new-ignored {
+ description
+ "Registration Fixed (New ignored).";
+ }
+ enum fixed-new-propagated {
+ description
+ "Registration Fixed (New propagated.";
+ }
+ enum forbidden {
+ description
+ "Registration Forbidden.";
+ }
+ enum normal {
+ description
+ "Normal Registration.";
+ }
+ }
+ description
+ "The Registrar Administrative Control values for MVRP
+ and MIRP for the VID.";
+ reference
+ "8.8.2 of IEEE Std 802.1Q-2018";
+ }
+ leaf vlan-transmitted {
+ type enumeration {
+ enum tagged {
+ description
+ "VLAN-tagged";
+ }
+ enum untagged {
+ description
+ "VLAN-untagged";
+ }
+ }
+ description
+ "Whether frames are to be VLAN-tagged or untagged when
+ transmitted.";
+ reference
+ "8.8.2 of IEEE Std 802.1Q-2018";
+ }
+ }
+ container mac-address-registration-entries {
+ description
+ "MAC address registration entries attributes.";
+ leaf control-element {
+ type enumeration {
+ enum registered {
+ description
+ "Forwarded, independently of any dynamic filtering
+ information held by the FDB.";
+ }
+ enum not-registered {
+ description
+ "Filtered, independently of any dynamic filtering
+ information.";
+ }
+ }
+ description
+ "containing a control element for each outbound Port,
+ specifying that a frame with a destination MAC address,
+ and in the case of VLAN Bridge components, VID that
+ meets this specification.";
+ reference
+ "8.8.4 of IEEE Std 802.1Q-2018";
+ }
+ }
+ container dynamic-vlan-registration-entries {
+ description
+ "Dynamic VLAN registration entries attributes.";
+ leaf control-element {
+ type enumeration {
+ enum registered {
+ description
+ "Forwarded, independently of any dynamic filtering
+ information held by the FDB.";
+ }
+ }
+ description
+ "containing a control element for each outbound Port,
+ specifying that a frame with a destination MAC address,
+ and in the case of VLAN Bridge components, VID that
+ meets this specification.";
+ reference
+ "8.8.5 of IEEE Std 802.1Q-2018";
+ }
+ }
+ container dynamic-reservation-entries {
+ description
+ "Dynamic reservation entries attributes.";
+ leaf control-element {
+ type enumeration {
+ enum forward {
+ description
+ "Forwarded, independently of any dynamic filtering
+ information held by the FDB.";
+ }
+ enum filter {
+ description
+ "Filtered, independently of any dynamic filtering
+ information.";
+ }
+ }
+ description
+ "Containing a control element for each outbound Port,
+ specifying that a frame with a destination MAC address,
+ and in the case of VLAN Bridge components, VID that
+ meets this specification.";
+ reference
+ "8.8.7 of IEEE Std 802.1Q-2018";
+ }
+ }
+ container dynamic-filtering-entries {
+ description
+ "Dynamic filtering entries attributes.";
+ leaf control-element {
+ type enumeration {
+ enum forward {
+ description
+ "Forwarded, independently of any dynamic filtering
+ information held by the FDB.";
+ }
+ }
+ description
+ "Containing a control element for each outbound Port,
+ specifying that a frame with a destination MAC address,
+ and in the case of VLAN Bridge components, VID that
+ meets this specification.";
+ reference
+ "8.8.3 of IEEE Std 802.1Q-2018";
+ }
+ }
+ }
+ }
+ }
+ grouping bridge-port-statistics-grouping {
+ description
+ "Grouping of bridge port statistics.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ leaf delay-exceeded-discards {
+ type yang:counter64;
+ description
+ "The number of frames discarded by this port due to excessive
+ transit delay through the Bridge. It is incremented by both
+ transparent and source route Bridges.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018
+ 8.6.6 of IEEE Std 802.1Q-2018";
+ }
+ leaf mtu-exceeded-discards {
+ type yang:counter64;
+ description
+ "The number of frames discarded by this port due to an
+ excessive size. It is incremented by both transparent and
+ source route Bridges.";
+ reference
+ "12.6.1.1.3, item g) of IEEE Std 802.1Q-2018";
+ }
+ leaf frame-rx {
+ type yang:counter64;
+ description
+ "The number of frames that have been received by this port
+ from its segment. Note that a frame received on the interface
+ corresponding to this port is only counted by this object if
+ and only if it is for a protocol being processed by the local
+ bridging function, including Bridge management frames.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf octets-rx {
+ type yang:counter64;
+ description
+ "The total number of octets in all valid frames received
+ (including BPDUs, frames addressed to the Bridge as an end
+ station, and frames that were submitted to the Forwarding
+ Process).";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf frame-tx {
+ type yang:counter64;
+ description
+ "The number of frames that have been transmitted by this port
+ to its segment. Note that a frame transmitted on the interface
+ corresponding to this port is only counted by this object if
+ and only if it is for a protocol being processed by the local
+ bridging function, including Bridge management frames.";
+ }
+ leaf octets-tx {
+ type yang:counter64;
+ description
+ "The total number of octets that have been transmitted by this
+ port to its segment.";
+ }
+ leaf discard-inbound {
+ type yang:counter64;
+ description
+ "Count of received valid frames that were discarded (i.e.,
+ filtered) by the Forwarding Process.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf forward-outbound {
+ type yang:counter64;
+ description
+ "The number of frames forwarded to the associated MAC Entity
+ (8.5).";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf discard-lack-of-buffers {
+ type yang:counter64;
+ description
+ "The count of frames that were to be transmitted through the
+ associated Port but were discarded due to lack of buffers.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf discard-transit-delay-exceeded {
+ type yang:counter64;
+ description
+ "The number of frames discarded by this port due to excessive
+ transit delay through the Bridge. It is incremented by both
+ transparent and source route Bridges.";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ leaf discard-on-error {
+ type yang:counter64;
+ description
+ "The number of frames that were to be forwarded on the
+ associated MAC but could not be transmitted (e.g., frame would
+ be too large, 6.5.8).";
+ reference
+ "12.6.1.1.3 of IEEE Std 802.1Q-2018";
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+module ieee802-dot1x-types {
+
+ namespace "urn:ieee:std:802.1X:yang:ieee802-dot1x-types";
+ prefix "dot1x-types";
+
+ organization
+ "Institute of Electrical and Electronics Engineers";
+
+ contact
+ "WG-URL: http://www.ieee802.org/1
+ WG-EMail: stds-802-1-L@ieee.org
+
+ Contact: IEEE 802.1 Working Group Chair
+ Postal: C/O IEEE 802.1 Working Group
+ IEEE Standards Association
+ 445 Hoes Lane
+ Piscataway
+ NJ 08854
+ USA
+
+ E-mail: STDS-802-1-L@LISTSERV.IEEE.ORG";
+
+ description
+ "Port-based network access control allows a network administrator
+ to restrict the use of IEEE 802 LAN service access points (ports)
+ to secure communication between authenticated and authorized
+ devices. IEEE Std 802.1X specifies an architecture, functional
+ elements, and protocols that support mutual authentication
+ between the clients of ports attached to the same LAN and secure
+ communication between the ports. The following control allows a
+ port to be reinitialized, terminating (and potentially
+ restarting) authentication exchanges and MKA operation, based on
+ a data model described in a set of YANG modules.";
+
+ revision 2020-02-18 {
+ description
+ "Updated Contact information.";
+ }
+
+ revision 2019-05-28 {
+ description
+ "Updates based upon comment resolution on draft
+ D1.0 of P802.1X-Rev.";
+ reference
+ "IEEE Std 802.1X-2020, Port-Based Network Access Control.";
+ }
+
+ /* ----------------------------------------------
+ * Type definitions used by dot1X YANG module
+ * ----------------------------------------------
+ */
+
+ typedef pae-nid {
+ type string {
+ length "0..100";
+ }
+ description
+ "Network Identity, which is a UTF-8 string identifying a
+ network or network service.";
+ reference
+ "IEEE 802.1X-2020 Clause 3, Clause 10.1, Clause 12.6";
+ }
+
+ typedef pae-session-user-name {
+ type string {
+ length "0..253";
+ }
+ description
+ "Session user name, which is a UTF-8 string, representing the
+ identity of the peer Supplicant.";
+ reference
+ "IEEE 802.1X-2020 Clause 12.5.1";
+ }
+
+ typedef pae-session-id {
+ type string {
+ length "3..253";
+ }
+ description
+ "Session Identifier, which is a UTF-8 string, uniquely
+ identifying the session within the context of the PAE's
+ system.";
+ reference
+ "IEEE 802.1X-2020 Clause 12.5.1";
+ }
+
+ typedef pae-nid-capabilities {
+ type bits {
+ bit eap {
+ position 0;
+ description
+ "EAP";
+ }
+ bit eapMka {
+ position 1;
+ description
+ "EAP + MKA";
+ }
+ bit eapMkaMacSec {
+ position 2;
+ description
+ "EAP + MKA + MACsec";
+ }
+ bit mka {
+ position 3;
+ description
+ "MKA";
+ }
+ bit mkaMacSec {
+ position 4;
+ description
+ "MKA + MACsec";
+ }
+ bit higherLayer {
+ position 5;
+ description
+ "Higher Layer (WebAuth)";
+ }
+ bit higherLayerFallback {
+ position 6;
+ description
+ "Higher Layer Fallback (WebAuth)";
+ }
+ bit vendorSpecific {
+ position 7;
+ description
+ "Vendor specific authentication mechanisms";
+ }
+ }
+ description
+ "Authentication and protection capabilities supported for the
+ NID. Indicates the combinations of authentication and
+ protection capabilities supported for the NID. Any set of these
+ combinations can be supported.";
+ reference
+ "IEEE 802.1X-2020 Clause 10.1, Clause 11.12.3";
+ }
+
+ typedef pae-access-status {
+ type enumeration {
+ enum no-access {
+ description
+ "Other than to authentication services, and to services
+ announced as available in the absence of authentication
+ (unauthenticated).";
+ }
+ enum remedial-access {
+ description
+ "The access granted is severely limited, possibly to
+ remedial services.";
+ }
+ enum restricted-access {
+ description
+ "The Controlled Port is operational, but restrictions have
+ been applied by the network that can limit access to some
+ resources.";
+ }
+ enum expected-access {
+ description
+ "The Controlled Port is operational, and access provided is
+ as expected for successful authentication and authorization
+ for the NID.";
+ }
+ }
+ description
+ "Indicates the transmitter's Controlled Port operational status
+ and current level of access resulting from authentication and
+ the consequent authorization controls applied by that port's
+ clients.";
+ reference
+ "IEEE 802.1X-2020 Clause 10.4, Clause 12.5";
+ }
+
+ typedef mka-kn {
+ type uint32;
+ description
+ "Indicates a Key Number (KN) used in MKA. It is assigned by
+ the Key Server (sequentially beginning with 1).";
+ reference
+ "IEEE 802.1X-2020 Clause 9.8, Clause 9.16";
+ }
+
+ typedef mka-an {
+ type uint32;
+ description
+ "A number that is concatenated with a MACsec Secure Channel
+ Identifier to identify a Secure Association. Indicates an
+ Association Number (AN) assigned by the Key Server for use with
+ the key number for transmission.";
+ reference
+ "IEEE 802.1X-2020 Clause 9.8, Clause 9.16";
+ }
+
+ typedef pae-ckn {
+ type string {
+ length "1..32";
+ }
+ description
+ "Indicates the CAK name to identify the Connectivity
+ Association Key (CAK) which is the root key in the MACsec Key
+ Agreement key hierarchy. All potential members of the CA use
+ the same CKN.";
+ reference
+ "IEEE 802.1X-2020 Clause 9.3.1, Clause 6.2";
+ }
+
+ typedef pae-kmd {
+ type string {
+ length "0..253";
+ }
+ description
+ "A Key Management Domain (KMD). A string of up to 253 UTF-8
+ characters that names the transmitting authenticator's key
+ management domain.";
+ reference
+ "IEEE Clause 12.6";
+ }
+
+ typedef pae-auth-data {
+ type string;
+ description
+ "Authorization data associated with the CAK.";
+ reference
+ "IEEE 802.1X-2020 Clause 9.16";
+ }
+
+ typedef sci-list-entry {
+ type string {
+ length "8";
+ }
+ description
+ "8 octet string, where the first 6 octets represents the MAC
+ Address (in canonical format), and the next 2 octets represents
+ the Port Identifier.";
+ reference
+ "IEEE 802.1AE Clause 7.1.2, Clause 10.7.1";
+ }
+
+ typedef pae-if-index {
+ type int32 {
+ range "1..2147483647";
+ }
+ description
+ "The interface index value represented by this interface.";
+ }
+
+} // ieee802-dot1x-types
--- /dev/null
+module ieee802-dot1x {\r
+\r
+ namespace "urn:ieee:std:802.1X:yang:ieee802-dot1x";\r
+ prefix "dot1x";\r
+\r
+ import ieee802-types { prefix "ieee"; }\r
+ import ietf-yang-types { prefix "yang"; }\r
+ import ietf-interfaces { prefix "if"; }\r
+ import ietf-system { prefix "sys"; }\r
+ import iana-if-type { prefix "ianaift"; }\r
+ import ieee802-dot1x-types { prefix "dot1x-types"; }\r
+\r
+ organization\r
+ "Institute of Electrical and Electronics Engineers";\r
+\r
+ contact\r
+ "WG-URL: http://www.ieee802.org/1\r
+ WG-EMail: stds-802-1-L@ieee.org\r
+\r
+ Contact: IEEE 802.1 Working Group Chair\r
+ Postal: C/O IEEE 802.1 Working Group\r
+ IEEE Standards Association\r
+ 445 Hoes Lane\r
+ Piscataway\r
+ NJ 08854\r
+ USA\r
+\r
+ E-mail: STDS-802-1-L@LISTSERV.IEEE.ORG";\r
+\r
+ description\r
+ "Port-based network access control allows a network administrator\r
+ to restrict the use of IEEE 802 LAN service access points (ports)\r
+ to secure communication between authenticated and authorized\r
+ devices. IEEE Std 802.1X specifies an architecture, functional\r
+ elements, and protocols that support mutual authentication\r
+ between the clients of ports attached to the same LAN and secure\r
+ communication between the ports. The following control allows a\r
+ port to be reinitialized, terminating (and potentially\r
+ restarting) authentication exchanges and MKA operation, based on\r
+ a data model described in a set of YANG modules.";\r
+\r
+ revision 2020-02-18 {\r
+ description\r
+ "Updated Contact information.";\r
+ }\r
+\r
+ revision 2019-06-12 {\r
+ description\r
+ "Updates based on comment resolution of the WG ballot of\r
+ P802.1X-Rev/D1.0.";\r
+ reference\r
+ "IEEE Std 802.1X-2020, Port-Based Network Access Control.";\r
+ }\r
+\r
+ grouping nid-group {\r
+ description\r
+ "The PAE NID Group configuration and operational information.";\r
+ list pae-nid-group {\r
+ key "nid";\r
+ description\r
+ "A list that contains the configuration and operational\r
+ nodes for the network announcement information for the\r
+ Logon Process.";\r
+ leaf nid {\r
+ type dot1x-types:pae-nid;\r
+ description\r
+ "Identification of the network or network service.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ leaf use-eap {\r
+ type enumeration {\r
+ enum never {\r
+ description\r
+ "Never.";\r
+ }\r
+ enum immediate {\r
+ description\r
+ "Immediately, concurrently with the use of MKA with any\r
+ cached CAK(s).";\r
+ }\r
+ enum mka-fail {\r
+ description\r
+ "Not until MKA has failed, if a prior CAK has been\r
+ cached.";\r
+ }\r
+ }\r
+ default "immediate";\r
+ description\r
+ "Determines when the Logon Process will initiate EAP, if\r
+ the Supplicant and or Authenticator are enabled, and takes\r
+ one of the above values.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ leaf unauth-allowed {\r
+ type enumeration {\r
+ enum never {\r
+ description\r
+ "Never.";\r
+ }\r
+ enum immediate {\r
+ description\r
+ "Immediately, independently of any current or future\r
+ attempts to authenticate using the PAE or MKA.";\r
+ }\r
+ enum auth-fail {\r
+ description\r
+ "Not until an attempt has been made to authenticate\r
+ using EAP, unless neither the supplicant nor the\r
+ authenticator is enabled, and MKA has attempted to use\r
+ any cached CAK (unless the KaY is not enabled).";\r
+ }\r
+ }\r
+ default "immediate";\r
+ description\r
+ "Determines when the Logon Process will tell the CP state\r
+ machine to provide unauthenticated connectivity, and takes\r
+ one of the above values.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ leaf unsecure-allowed {\r
+ type enumeration {\r
+ enum never {\r
+ description\r
+ "Never.";\r
+ }\r
+ enum immediate {\r
+ description\r
+ "Immediately, to provide connectivity concurrently with\r
+ the use of MKA with any CAK acquired through EAP.";\r
+ }\r
+ enum mka-fail {\r
+ description\r
+ "Not until MKA has failed, or is not enabled.";\r
+ }\r
+ enum mka-server {\r
+ description\r
+ "Only if directed by the MKA server.";\r
+ }\r
+ }\r
+ default "immediate";\r
+ description\r
+ "Determines when the Logon Process will tell the CP state\r
+ machine to provide authenticated but unsecured\r
+ connectivity, takes one of the above values.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ leaf unauthenticated-access {\r
+ type enumeration {\r
+ enum no-access {\r
+ description\r
+ "Other than to authentication services.";\r
+ }\r
+ enum fallback-access {\r
+ description\r
+ "Limited access can be provided after authentication\r
+ failure.";\r
+ }\r
+ enum limited-access {\r
+ description\r
+ "Immediate limited access is available without\r
+ authentication.";\r
+ }\r
+ enum open-access {\r
+ description\r
+ "Immediate access is available without\r
+ authentication.";\r
+ }\r
+ }\r
+ default "no-access";\r
+ description\r
+ "Unauthenticated access capabilities provided by the NID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.1";\r
+ }\r
+ leaf access-capabilities {\r
+ type dot1x-types:pae-nid-capabilities;\r
+ description\r
+ "Authentication and protection capabilities supported for\r
+ the NID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.1";\r
+ }\r
+\r
+ leaf kmd {\r
+ type dot1x-types:pae-kmd;\r
+ config false;\r
+ description\r
+ "The Key Management Domain for the NID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ }\r
+ }\r
+\r
+ grouping port-capabilities {\r
+ description\r
+ "Per port PAE feature capabilities.";\r
+ leaf supp {\r
+ type boolean;\r
+ description\r
+ "Indicates if PACP EAP Supplicant is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf auth {\r
+ type boolean;\r
+ description\r
+ "Indicates if PACP EAP Authenticator is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf mka {\r
+ type boolean;\r
+ description\r
+ "Indicates if MKA is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf macsec {\r
+ type boolean;\r
+ description\r
+ "Indicates if MACsec on the Controlled port is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf announcements {\r
+ type boolean;\r
+ description\r
+ "Indicates if the ability to send EAPOL announcements is\r
+ supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf listener {\r
+ type boolean;\r
+ description\r
+ "Indicates if the ability to use received EAPOL\r
+ announcements is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf virtual-ports {\r
+ type boolean;\r
+ description\r
+ "Indicates if virtual ports for a real port is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf in-service-upgrades {\r
+ type boolean;\r
+ description\r
+ "Indicates if MKA in-service upgrades is supported.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ }\r
+\r
+ /* ---------------------------------------------------\r
+ * Configuration objects used by 802.1X YANG module\r
+ * ---------------------------------------------------\r
+ */\r
+ augment "/sys:system" {\r
+ description\r
+ "Augment system with 802.1X PAE System specific configuration\r
+ nodes.";\r
+ container pae-system {\r
+ description\r
+ "Contains all 802.1X PAE System specific related\r
+ configuration and operational data.";\r
+ leaf name {\r
+ type string {\r
+ length "1..255";\r
+ }\r
+ description\r
+ "The name which uniquely identifies the PAE System.";\r
+ }\r
+ leaf system-access-control {\r
+ type enumeration {\r
+ enum disabled {\r
+ description\r
+ "Deletes any virtual ports previously instantiated, and\r
+ terminates authentication exchanges and MKA\r
+ operation.";\r
+ }\r
+ enum enabled {\r
+ description\r
+ "Enables PAE system access control.";\r
+ }\r
+ }\r
+ description\r
+ "Setting this control to disabled deletes any virtual ports\r
+ previously instantiated, and terminates authentication\r
+ exchanges and MKA operation. Each real port PAE behaves as\r
+ if enabledVirtualPorts was clear, the PAEs Supplicant,\r
+ Authenticator, and KaY as if their enabled controls were\r
+ clear, and Logon Process(es) as if unauthAllowed was\r
+ Immediate. Announcements can be transmitted (subject to\r
+ other controls), both periodically and in response to\r
+ announcement requests (conveyed by EAPOL-Starts or\r
+ EAPOL-Announcement-Reqs) but are sent with a single NID\r
+ Set, with a null NID, and the Access Information TLV (and\r
+ no other) with an pae-access-status of No Access,\r
+ accessRequested false, OpenAccess, and no\r
+ accessCapabilities. The control variable settings for each\r
+ real port PAE are unaffected, and will be used once\r
+ systemAccessControl is set to enabled.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.1";\r
+ }\r
+ leaf system-announcements {\r
+ type enumeration {\r
+ enum disabled {\r
+ description\r
+ "Causes each PAE to behave as if enabled were clear\r
+ for the PAE's Announcement functionality.";\r
+ }\r
+ enum enabled {\r
+ description\r
+ "Enables PAE system announcements.";\r
+ }\r
+ }\r
+ description\r
+ "Setting this control to Disabled causes each PAE to behave\r
+ as if enabled were clear for the PAE's Announcement\r
+ functionality. The independent controls for each PAE apply\r
+ if systemAnnouncements is Enabled.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.1";\r
+ }\r
+ leaf eapol-protocol-version {\r
+ type uint8;\r
+ config false;\r
+ description\r
+ "The EAPOL protocol version for this system.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.1, Clause 11.3";\r
+ }\r
+ leaf mka-version {\r
+ type uint8;\r
+ config false;\r
+ description\r
+ "The MKA protocol version for this system.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.1, Clause 11.3";\r
+ }\r
+ leaf-list pae {\r
+ type if:interface-ref;\r
+ config false;\r
+ description\r
+ "List of PAE references.";\r
+ }\r
+ }\r
+ }\r
+\r
+ /*\r
+ * Port Authentication Entity (PAE) Nodes\r
+ */\r
+ augment "/if:interfaces/if:interface" {\r
+ when "if:type = 'ianaift:ethernetCsmacd' or\r
+ if:type = 'ianaift:ilan' or\r
+ if:type = 'ianaift:macSecControlledIF' or\r
+ if:type = 'ianaift:ptm' or\r
+ if:type = 'ianaift:bridge'" {\r
+ description\r
+ "Applies to the Controlled Port of SecY or PAC shim or\r
+ Ethernet related Interface.";\r
+ }\r
+ description\r
+ "Augment interface model with PAE configuration and\r
+ operational nodes.";\r
+ reference\r
+ "IEEE 802.1AE Clause 11.7 and IEEE 802.1X-2020 Clause 6.5 and\r
+ Clause 13.3.2";\r
+ container pae {\r
+ description\r
+ "Contains PAE configuration and operational related nodes.";\r
+ leaf pae-system {\r
+ type leafref {\r
+ path "/sys:system/dot1x:pae-system/dot1x:name";\r
+ }\r
+ description\r
+ "The PAE system that this PAE is a member of.";\r
+ }\r
+ leaf vp-enable {\r
+ when "../port-type = 'real-port' and\r
+ ../port-capabilities/virtual-ports = 'true'" {\r
+ description\r
+ "Applies when port is Real Port and virtual port\r
+ capabilities are supported.";\r
+ }\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "A real port's PAE may be configured to create virtual\r
+ ports to support multi-access LANs provided that MKA and\r
+ MACsec operation is enabled for that port.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.7";\r
+ }\r
+ container port-capabilities {\r
+ description\r
+ "Per port PAE feature capabilities.";\r
+ uses port-capabilities;\r
+ }\r
+\r
+ leaf port-name {\r
+ type if:interface-ref;\r
+ config false;\r
+ description\r
+ "Each PAE is uniquely identified by a port name.";\r
+ }\r
+ leaf port-number {\r
+ type dot1x-types:pae-if-index;\r
+ config false;\r
+ description\r
+ "Each PAE is uniquely identified by a port number. The\r
+ port number used is unique amongst all port names for the\r
+ system, and directly or indirectly identifies the\r
+ Uncontrolled Port that supports the PAE. If the PAE has\r
+ been dynamically instantiated to support an existing or\r
+ potential virtual port, this portNumber, the\r
+ uncontrolledPortNumber and the controlledPortNumber are\r
+ allocated by the real ports PAE, and this portNumber is the\r
+ uncontrolledPortNumber. If the PAE supports a real port,\r
+ this portNumber is the commonPortNumber for the associated\r
+ PAC or SecY.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf controlled-port-name {\r
+ type if:interface-ref;\r
+ config false;\r
+ description\r
+ "Each PAE is uniquely identified by a port name.";\r
+ }\r
+ leaf controlled-port-number {\r
+ type dot1x-types:pae-if-index;\r
+ config false;\r
+ description\r
+ "The port for the associated PAC or SecYs Controlled\r
+ Port.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf uncontrolled-port-name {\r
+ type if:interface-ref;\r
+ config false;\r
+ description\r
+ "The uncontrolled port name reference.";\r
+ }\r
+ leaf uncontrolled-port-number {\r
+ type dot1x-types:pae-if-index;\r
+ config false;\r
+ description\r
+ "The port for the associated PAC or SecYs Uncontrolled\r
+ Port.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf common-port-name {\r
+ type if:interface-ref;\r
+ config false;\r
+ description\r
+ "The common port name reference.";\r
+ }\r
+ leaf common-port-number {\r
+ type dot1x-types:pae-if-index;\r
+ config false;\r
+ description\r
+ "The port for the associated PAC or SecYs Common Port. All\r
+ the virtual ports created for a given real port share the\r
+ same Common Port and commonPortNumber.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf port-type {\r
+ type enumeration {\r
+ enum real-port {\r
+ description\r
+ "Real Port type.";\r
+ }\r
+ enum virtual-port {\r
+ description\r
+ "Virtual Port type.";\r
+ }\r
+ }\r
+ //config false;\r
+ description\r
+ "The port type of the PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ container virtual-port {\r
+ when "../port-capabilities/virtual-ports = 'true'" {\r
+ description\r
+ "Applies when the virtual ports port capability is\r
+ supported.";\r
+ }\r
+ config false;\r
+ description\r
+ "Contains Virtual Port operational state information.";\r
+ leaf max {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when Port is a Real Port.";\r
+ }\r
+ type uint32;\r
+ description\r
+ "The guaranteed maximum number of virtual ports.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf current {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when Port is a Real Port.";\r
+ }\r
+ type yang:gauge32;\r
+ description\r
+ "The current number of virtual ports.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.2";\r
+ }\r
+ leaf start {\r
+ when "../../port-type = 'virtual-port'" {\r
+ description\r
+ "Applies when Port is a Virtual Port.";\r
+ }\r
+ type boolean;\r
+ description\r
+ "Set if the virtual port was created by receipt of an\r
+ EAPOL-Start frame.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.7";\r
+ }\r
+ leaf peer-address {\r
+ when "../../port-type = 'virtual-port'" {\r
+ description\r
+ "Applies when Port is a Virtual Port.";\r
+ }\r
+ type ieee:mac-address;\r
+ description\r
+ "The source MAC Address of the EAPOL-Start (if vpStart is\r
+ set).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.9.7";\r
+ }\r
+ }\r
+\r
+ container supplicant {\r
+ when "../port-type = 'real-port' and\r
+ ../port-capabilities/supp = 'true'" {\r
+ description\r
+ "Applies to Real Port when supplicant port capabilities\r
+ are supported.";\r
+ }\r
+ description\r
+ "Contains the configuration nodes for the Supplicant PAE\r
+ associated with each port.";\r
+ leaf held-period {\r
+ type uint16;\r
+ units seconds;\r
+ default "60";\r
+ description\r
+ "The initial value of the timer used to impose a wait\r
+ period after a failed authentication attempt, before\r
+ another attempt is permitted.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.6";\r
+ }\r
+ leaf retry-max {\r
+ type uint32;\r
+ default "2";\r
+ description\r
+ "Specifies the maximum number of re-authentication\r
+ attempts on an authenticator port before port is\r
+ unauthorized.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.7";\r
+ }\r
+\r
+ leaf enabled {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the PAE can provide authentication. Will\r
+ be FALSE if the Port is not enabled, if the functionality\r
+ provided by the PAE is not available, or not implemented,\r
+ or the control variable enable has been cleared by\r
+ management, e.g. because the application scenario\r
+ authenticates a user and there is no user logged on.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf authenticate {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by the PAE client to request authentication, and\r
+ allows reauthentication while set. Cleared by the client\r
+ to revoke authentication. To enable authentication the\r
+ client also needs to clear failed (if set).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf authenticated {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the PAE is currently authenticated, and\r
+ cleared if the authentication fails or is revoked.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf failed {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the authentication has failed or has been\r
+ terminated. The cause could be a Fail returned by EAP,\r
+ either immediately or following a reauthentication, an\r
+ excessive number of attempts to authenticate (either\r
+ immediately or upon reauthentication), or the client\r
+ deasserting authenticate. The PACP will clear\r
+ authenticated as well as setting failed. Any ongoing\r
+ authentication exchange will be terminated (by the state\r
+ machines) if enable becomes FALSE and enabled will be\r
+ cleared, but failed will not be set.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ }\r
+\r
+ container authenticator {\r
+ when "../port-capabilities/auth = 'true'" {\r
+ description\r
+ "Applies when the Authenticator is supported.";\r
+ }\r
+ description\r
+ "Contains configuration nodes for the Authenticator PAE\r
+ associated with each port.";\r
+ leaf quiet-period {\r
+ type uint16;\r
+ units seconds;\r
+ default "60";\r
+ description\r
+ "Number of seconds that the authenticator remains in the quiet\r
+ state following a failed authentication exchange with the\r
+ supplicant.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.6, Figure 12-3";\r
+ }\r
+ leaf reauth-period {\r
+ type uint32;\r
+ units seconds;\r
+ default "3600";\r
+ description\r
+ "This object indicates the time period of the\r
+ reauthentication to the supplicant.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.6, Figure 12-3";\r
+ }\r
+ leaf reauth-enable {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Re-authentication is enabled or not.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 5.8 and 8.9";\r
+ }\r
+ leaf retry-max {\r
+ type uint32;\r
+ default "2";\r
+ description\r
+ "Specifies the maximum number of re-authentication\r
+ attempts on an authenticator port before port is\r
+ unauthorized.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.9";\r
+ }\r
+\r
+ leaf enabled {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the PAE can provide authentication. Will\r
+ be FALSE if the Port is not enabled, if the functionality\r
+ provided by the PAE is not available, or not implemented,\r
+ or the control variable enable has been cleared by\r
+ management, e.g. because the application scenario\r
+ authenticates a user and there is no user logged on.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf authenticate {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by the PAE client to request authentication, and\r
+ allows reauthentication while set. Cleared by the client\r
+ to revoke authentication. To enable authentication the\r
+ client also needs to clear failed (if set).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf authenticated {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the PAE is currently authenticated, and\r
+ cleared if the authentication fails or is revoked.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ leaf failed {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set by PACP if the authentication has failed or has been\r
+ terminated. The cause could be a Fail returned by EAP,\r
+ either immediately or following a reauthentication, an\r
+ excessive number of attempts to authenticate (either\r
+ immediately or upon reauthentication), or the client\r
+ deasserting authenticate. The PACP will clear\r
+ authenticated as well as setting failed. Any ongoing\r
+ authentication exchange will be terminated (by the state\r
+ machines) if enable becomes FALSE and enabled will be\r
+ cleared, but failed will not be set.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 8.4";\r
+ }\r
+ }\r
+\r
+ container kay {\r
+ when "../port-capabilities/mka = 'true'" {\r
+ description\r
+ "Applies when the MKA port capability is supported.";\r
+ }\r
+ description\r
+ "Contains configuration system level information for each\r
+ Interface supported by the KaY (Key Aggreement Entity).";\r
+ leaf enable {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Set by management to enable (clear to disable) the use\r
+ of MKA.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ container actor {\r
+ description\r
+ "Contains configuration and operational nodes\r
+ associated with the actor";\r
+ leaf priority {\r
+ type uint8;\r
+ description\r
+ "The Key Server Priority for all the ports actors.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf sci {\r
+ type dot1x-types:sci-list-entry;\r
+ config false;\r
+ description\r
+ "The SCI assigned by the system to the port (applies\r
+ to all the ports actors).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ container key-server {\r
+ description\r
+ "Contains configuration and operational nodes\r
+ associated with the key\r
+ server.";\r
+ leaf priority {\r
+ type uint8;\r
+ description\r
+ "The Key Server Priority for the Key Server for the\r
+ principal actor. Matches the actorPriority if the\r
+ actor is the Key Server";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf sci {\r
+ type dot1x-types:sci-list-entry;\r
+ config false;\r
+ description\r
+ "The SCI for Key Server for the principal actor. Null\r
+ if there is no principal actor, or that actor has no\r
+ live peers. Matches the actorSCI if the actor is the\r
+ Key Server.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ container group {\r
+ description\r
+ "Contains configuration nodes associated with the\r
+ group.";\r
+ leaf join {\r
+ type boolean;\r
+ default "true";\r
+ description\r
+ "Set if the KaY will accept Group CAKs distributed by\r
+ MKA.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf form {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Set if the KaY will attempt to use point-to-point CAs\r
+ to distribute a Group CAK, if its principal actor is\r
+ the Key Server for all the point-to-point CAs.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf new {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Set by management if a new Group CAK is to be\r
+ distributed, if the principal actor is the Key Server\r
+ for all point-to-point CAs. Cleared by the KaY when\r
+ distribution is complete.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+\r
+ container macsec {\r
+ when "../../port-capabilities/macsec = 'true'" {\r
+ description\r
+ "Applies when the MACsec port capability is\r
+ supported.";\r
+ }\r
+ description\r
+ "Contains configuration and operational nodes\r
+ associated with macsec.";\r
+ leaf capable {\r
+ type boolean;\r
+ description\r
+ "Set if MACsec is implemented.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf desired {\r
+ type boolean;\r
+ default "true";\r
+ description\r
+ "Set if the participant desires MACsec frame protection.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+\r
+ leaf protect {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "As used by the CP state machine, see 12.4.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf validate {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "As used by the CP state machine, see 12.4.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf replay-protect {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "As used by the CP state machine, see 12.4.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ leaf suspend-on-request {\r
+ type boolean;\r
+ default "true";\r
+ description\r
+ "Set by management to allow the KaYs principal actor to\r
+ initiate a suspension if it is the Key Server and another\r
+ participant has requested a suspension.";\r
+ }\r
+ leaf suspend-for {\r
+ type uint8;\r
+ default "0";\r
+ description\r
+ "Set by management to a non-zero number of seconds\r
+ between 1 and MKA Suspension Limit to initiate a\r
+ suspension (9.18) of that duration (if the KaYs principal\r
+ actor is the Key Server) or to request a suspension\r
+ (otherwise).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.18";\r
+ }\r
+\r
+ leaf suspended-while {\r
+ type uint8;\r
+ config false;\r
+ description\r
+ "Read by management to determine if a suspension is in\r
+ progress and (when available) to discover the remaining\r
+ duration of that suspension";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.18";\r
+ }\r
+ leaf active {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set if there is at least one active actor, transmitting\r
+ MKPDUs.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf authenticated {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set if the principal actor, i.e. the participant that\r
+ has the highest priority Key Server and one or more live\r
+ peers, has determined that Controlled Port communication\r
+ should proceed without MACsec.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf secured {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set if the principal actor has determined that\r
+ communication should use MACsec.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf failed {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Cleared when authenticated or secured are set, set if\r
+ the latter are clear and MKA Life Time has elapsed since\r
+ an MKA participant was last created.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ container key-number {\r
+ config false;\r
+ description\r
+ "Contains operation state nodes for Key Numbers.";\r
+ leaf tx {\r
+ type dot1x-types:mka-kn;\r
+ description\r
+ "The Key Number assigned by the Key Server to the SAK\r
+ currently being used for transmission. Null if MACsec\r
+ is not being used.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf rx {\r
+ type dot1x-types:mka-kn;\r
+ description\r
+ "The Key Number assigned by the Key Server to the\r
+ oldest SAK currently being used for reception. The same\r
+ as txKN if a single SAK is currently in use (as will\r
+ most often be the case). Null if MACsec is not being\r
+ used.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ container association-number {\r
+ config false;\r
+ description\r
+ "Contains operation state nodes for Association\r
+ Numbers.";\r
+ leaf tx {\r
+ type dot1x-types:mka-an;\r
+ description\r
+ "The Association Number assigned by the Key Server for\r
+ use with txKN. Zero if MACsec is not in use.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf rx {\r
+ type dot1x-types:mka-an;\r
+ description\r
+ "The Association Number assigned by the Key Server for\r
+ use with rxKN. The same as txAN if a single SAK is\r
+ currently in use. Zero if MACsec is not in use.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+\r
+ list participants {\r
+ key "participant";\r
+ description\r
+ "Contains list of configuration and operational nodes\r
+ for each MKA participant supported by the KaY MKA\r
+ entity.";\r
+ leaf participant {\r
+ type uint32;\r
+ description\r
+ "Key into Participants list.";\r
+ }\r
+ leaf cached {\r
+ type boolean;\r
+ description\r
+ "Set by the KaY if the participants parameters are\r
+ cached. If set, cached can be cleared by management to\r
+ remove the participant from the cache.";\r
+ }\r
+ leaf active {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Set if the participant is active, i.e., is currently\r
+ transmitting periodic MKPDUs.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf retain {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "Set by management to retain the participant in the\r
+ cache, even if the KaY would normally remove it (due to\r
+ lack of use for example).";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf activate {\r
+ type enumeration {\r
+ enum default {\r
+ description\r
+ "The participant is from cached entries created by\r
+ the KaY as part of normal operation, without\r
+ explicit management, and is activated according to\r
+ the implementation dependent policies of the KaY.";\r
+ }\r
+ enum disabled {\r
+ description\r
+ "The participant allows the cache information to be\r
+ retained, but disabled for indefinite period.";\r
+ }\r
+ enum on-oper-up {\r
+ description\r
+ "Causing the participant to be activated when the\r
+ PAEs part is activated, and therefore when the SecY\r
+ or PACs Common Port becomes operational.";\r
+ }\r
+ enum always {\r
+ description\r
+ "Causing the participant to remain active all the\r
+ time, even in the continued absence of partners.";\r
+ }\r
+ }\r
+ default "default";\r
+ description\r
+ "Controls when the participant is activated. Cached\r
+ entries created by the KaY as part of normal operation,\r
+ without explicit management, have the value Default,\r
+ and are activated according to the implementation\r
+ dependent policies of the KaY. This variable can be\r
+ set to any of its values by management. Disabled allows\r
+ the cache entry to be retained, but disabled for an\r
+ indefinite period. OnOperUp causes the participant to\r
+ be activated when the PAEs port (and therefore when the\r
+ SecY or PACs Common Port becomes MAC_Operational).\r
+ Always causes the participant to remain active all the\r
+ time, even in the continued absence of partners. If the\r
+ value is changed to Disabled or OnOperUp, the\r
+ participant ceases operation immediately and receipt of\r
+ MKPDUs with a matching CKN during a subsequent period\r
+ of twice MKA Life Time will not cause the participant\r
+ to become active once more.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+\r
+ container peers {\r
+ config false;\r
+ description\r
+ "Contains operational state nodes associated with the\r
+ Peers.";\r
+ leaf-list live {\r
+ type dot1x-types:sci-list-entry;\r
+ description\r
+ "A list of the SCIs of the participants live\r
+ peers.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf-list potential {\r
+ type dot1x-types:sci-list-entry;\r
+ description\r
+ "A list of the SCIs of the participants potential\r
+ peers.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ leaf ckn {\r
+ type dot1x-types:pae-ckn;\r
+ config false;\r
+ description\r
+ "The secure Connectivity Association Key Name for the\r
+ participant.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf kmd {\r
+ type dot1x-types:pae-kmd;\r
+ config false;\r
+ description\r
+ "The Key Management Domain for the participant.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf nid {\r
+ type dot1x-types:pae-nid;\r
+ config false;\r
+ description\r
+ "The NID for the participant.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf auth-data {\r
+ type dot1x-types:pae-auth-data;\r
+ config false;\r
+ description\r
+ "Authorization data associated with the secure\r
+ Connectivity Association Key.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf principal {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set if the participant is currently the principal\r
+ actor.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ leaf dist-ckn {\r
+ type dot1x-types:pae-ckn;\r
+ config false;\r
+ description\r
+ "The CKN for the last CAK distributed (either by the\r
+ actor or one of its partners). Null if this participant\r
+ has not been used to distribute a CAK.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 9.16";\r
+ }\r
+ }\r
+ }\r
+\r
+ container logon-nid {\r
+ description\r
+ "Contains the configuration and operational related NID\r
+ information for the Logon Process. The Logon Process may\r
+ use Network Identifiers (NIDs) to manage its use of\r
+ authentication credentials, cached CAKs, and\r
+ announcements.";\r
+ leaf selected {\r
+ type dot1x-types:pae-nid;\r
+ description\r
+ "The NID currently configured for use by an access\r
+ controlled port when transmitting EAPOL-Start frames.\r
+ Defaults to the null NID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ uses nid-group;\r
+\r
+ leaf connected {\r
+ type dot1x-types:pae-nid;\r
+ config false;\r
+ description\r
+ "The NID associated with the current connectivity\r
+ (possibly unauthenticated) provided by the operation of\r
+ the CP state machine.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ leaf requested {\r
+ type dot1x-types:pae-nid;\r
+ config false;\r
+ description\r
+ "The NID marked as Access requested in announcements, as\r
+ determined from EAPOL-Start frames. Defaults to the\r
+ selectedNID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+ }\r
+\r
+ container announcer {\r
+ when "../port-capabilities/announcements = 'true'" {\r
+ description\r
+ "Applies when the Announcements port capabilities are\r
+ supported.";\r
+ }\r
+ description\r
+ "Contains the configuration related Announcer\r
+ information.";\r
+ leaf enable {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "A boolean indicating if the announcer is enabled or\r
+ not.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ list announce {\r
+ key "announces";\r
+ description\r
+ "Contains the configuration related status information\r
+ that the Announcers announce in the network announcement\r
+ of the PAE system.";\r
+ leaf announces {\r
+ type uint32;\r
+ description\r
+ "Key into Announce list.";\r
+ }\r
+ uses nid-group;\r
+\r
+ leaf nid {\r
+ type dot1x-types:pae-nid;\r
+ config false;\r
+ description\r
+ "The NID information to identify a received network\r
+ announcement for the PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf access-status {\r
+ type dot1x-types:pae-access-status;\r
+ config false;\r
+ description\r
+ "Access Status reflects connectivity as a result of\r
+ authentication attempts, and might be set directly by\r
+ the system or configured by AAA protocols.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4, Clause 12.5";\r
+ }\r
+ }\r
+ }\r
+\r
+ container listener {\r
+ when "../port-capabilities/listener = 'true'" {\r
+ description\r
+ "Applies when the Listener port capability is\r
+ supported.";\r
+ }\r
+ description\r
+ "Contains the configuration and operational Listener\r
+ node related information.";\r
+ leaf enable {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "A boolean indicating if the listener is enabled or\r
+ not.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+\r
+ list announcement {\r
+ key "announcements";\r
+ config false;\r
+ description\r
+ "A list containing the operational status information\r
+ that the Listeners receive in the network announcement of\r
+ the PAE system.";\r
+ leaf announcements {\r
+ type uint32;\r
+ description\r
+ "The key into the list of Announce nodes.";\r
+ }\r
+ leaf nid {\r
+ type dot1x-types:pae-nid;\r
+ description\r
+ "The NID information to identify a received network\r
+ announcement for the PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf kmd {\r
+ type dot1x-types:pae-kmd;\r
+ description\r
+ "The KMD information for this received network\r
+ announcement of the PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf specific {\r
+ type boolean;\r
+ description\r
+ "This object indicates the received announcement\r
+ information was specific to the receiving PAE, not\r
+ generic for all systems attached to the LAN.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf access-status {\r
+ type dot1x-types:pae-access-status;\r
+ description\r
+ "The object information reflects connectivity as a\r
+ result of authentication attempts for this received\r
+ network announcement of the PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf requested-nid {\r
+ type boolean;\r
+ description\r
+ "The authenticated access has been requested for this\r
+ particular NID or not.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf unauthenticated-access {\r
+ type dot1x-types:pae-access-status;\r
+ description\r
+ "The access capability of the ports clients without\r
+ authentication in this received network announcement of\r
+ the PAE";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ leaf access-capabilities {\r
+ type dot1x-types:pae-nid-capabilities;\r
+ description\r
+ "The authentication and protection capabilities\r
+ supported for the NID.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ }\r
+ list cipher-suites {\r
+ key "index";\r
+ description\r
+ "A table contains the Cipher Suites information that\r
+ the Listeners receive in the network announcement of\r
+ the PAE system.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 10.4";\r
+ leaf index {\r
+ type uint16;\r
+ description\r
+ "Key into cipher suite entry.";\r
+ }\r
+ leaf cipherSuite {\r
+ type string;\r
+ description\r
+ "cipher Suite identifier.";\r
+ }\r
+ leaf cipherSuiteCapability {\r
+ type uint32;\r
+ description\r
+ "Cipher Suite capability.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ container eapol-statistics {\r
+ config false;\r
+ description\r
+ "Contains operational EAPOL statistics.";\r
+ leaf invalid-eapol-frame-rx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of invalid EAPOL frames of any type that\r
+ have been received by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eap-length-error-frames-rx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL frames that the Packet Body Length\r
+ does not match a Packet Body that is contained within the\r
+ octets of the received EAPOL MPDU in this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-announcements-rx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Announcement frames that have been\r
+ received by this PAE";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-announce-reqs-rx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Announcement-Req frames that have\r
+ been received by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-port-unavailable {\r
+ when "../../port-type = 'real-port' and\r
+ ../../port-capabilities/virtual-ports = 'true'" {\r
+ description\r
+ "Applies when port is Real Port and when the virtual\r
+ ports capability is supported.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL frames that are discarded because\r
+ their processing would require the creation of a virtual\r
+ port, for which there are inadequate or constrained\r
+ resources, or an existing virtual port and no such port\r
+ currently exists. If virtual port is not supported, this\r
+ object should be always 0.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-start-frames-rx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Start frames that have been received\r
+ by this PAE";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-eap-frames-rx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-EAP frames that have been received\r
+ by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-logoff-frames-rx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Logoff frames that have been\r
+ received by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-mk-no-cfn {\r
+ type yang:counter32;\r
+ description\r
+ "The number of MKPDUs received with MKA not enabled or\r
+ CKN not recognized in this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf eapol-mk-invalid-frames-rx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of MKPDUs failing in message authentication\r
+ on receipt process in this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.1";\r
+ }\r
+ leaf last-eapol-frame-source {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type ieee:mac-address;\r
+ description\r
+ "The source MAC address of last received EAPOL frame by\r
+ this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.2";\r
+ }\r
+ leaf last-eapol-frame-version {\r
+ type uint8;\r
+ description\r
+ "The version of last received EAPOL frame by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.2";\r
+ }\r
+ leaf eapol-supp-eap-frames-tx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-EAP frames that have been\r
+ transmitted by the supplicant of this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-logoff-frames-tx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Logoff frames that have been\r
+ transmitted by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-announcements-tx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Announcement frames that have been\r
+ transmitted by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-announce-reqs-tx {\r
+ when "../../port-type = 'real-port'" {\r
+ description\r
+ "Applies when port is Real Port.";\r
+ }\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Announcement-Req frames that have\r
+ been transmitted by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-start-frames-tx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-Start frames that have been\r
+ transmitted by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-auth-eap-frames-tx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-EAP frames that have been\r
+ transmitted by the authenticator of this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ leaf eapol-mka-frames-tx {\r
+ type yang:counter32;\r
+ description\r
+ "The number of EAPOL-MKA frames with no CKN information\r
+ that have been transmitted by this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.8.3";\r
+ }\r
+ }\r
+\r
+ container logon-process {\r
+ description\r
+ "Contains configuration and operational system level\r
+ information for each port to support the Logon Process(es)\r
+ status information.";\r
+ leaf logon {\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "A boolean indicating if the logon-process is enabled or\r
+ not.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5";\r
+ }\r
+\r
+ leaf connect {\r
+ type enumeration {\r
+ enum pending {\r
+ description\r
+ "Prevent connectivity by clearing the\r
+ controlledPortEnabled parameter.";\r
+ }\r
+ enum unauthenticated {\r
+ description\r
+ "Provide unsecured connectivity, setting\r
+ controlledPortEnabled.";\r
+ }\r
+ enum authenticated {\r
+ description\r
+ "Provide unsecured connectivity with authorization\r
+ data, setting controlledPortEnabled.";\r
+ }\r
+ enum secure {\r
+ description\r
+ "Provide secure connectivity, using SAKs provided by\r
+ the KaY (when available) and setting\r
+ controlledPortEnabled when those keys are installed\r
+ and in use, as specified in detail by the CP state\r
+ machine.";\r
+ }\r
+ }\r
+ config false;\r
+ description\r
+ "The Logon Process sets this variable to one of the\r
+ above values.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.3";\r
+ }\r
+ leaf port-valid {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Set if Controlled Port communication is secured as\r
+ specified by the MACsec control macsecProtect.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.3";\r
+ }\r
+ list session-statistics {\r
+ key "session-id";\r
+ config false;\r
+ description\r
+ "Contains operational state nodes associated with the\r
+ session statistics.";\r
+ leaf session-id {\r
+ type dot1x-types:pae-session-id;\r
+ description\r
+ "Key into list of session statistics.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf user-name {\r
+ type dot1x-types:pae-session-user-name;\r
+ description\r
+ "User name of the session.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf octets-rx {\r
+ type yang:counter64;\r
+ description\r
+ "The number of octets received in this session of this\r
+ PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf octets-tx {\r
+ type yang:counter64;\r
+ description\r
+ "The number of octets transmitted in this session of\r
+ this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf frames-rx {\r
+ type yang:counter64;\r
+ description\r
+ "The number of packets received in this session of\r
+ this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf frames-tx {\r
+ type yang:counter64;\r
+ description\r
+ "The number of packets transmitted in this session of\r
+ this PAE.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf time {\r
+ type uint32;\r
+ units "seconds";\r
+ description\r
+ "Session Time. The duration of the session in\r
+ seconds.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ leaf terminate-cause {\r
+ type enumeration {\r
+ enum common_port_MAC_operational_false {\r
+ description\r
+ "Common Port for this PAE is not operational.";\r
+ }\r
+ enum system_access_control_disabled {\r
+ description\r
+ "The system-access-control node of the pae-system\r
+ is disabled or initialization process of this PAE\r
+ is invoked.";\r
+ }\r
+ enum eapol_logoff_rx {\r
+ description\r
+ "The PAE has received EAPOL-Logoff frame.";\r
+ }\r
+ enum eap_reauthentication_failure {\r
+ description\r
+ "EAP reauthentication has failed.";\r
+ }\r
+ enum mka-failure_termination {\r
+ description\r
+ "MKA failure or other MKA termination.";\r
+ }\r
+ enum new_session-beginning {\r
+ description\r
+ "New session beginning.";\r
+ }\r
+ enum not_terminated_yet {\r
+ description\r
+ "Not Terminated Yet.";\r
+ }\r
+ }\r
+ description\r
+ "The reason for the session termination.";\r
+ reference\r
+ "IEEE 802.1X-2020 Clause 12.5.1";\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ container nid-group {\r
+ description\r
+ "Contains both configuration and operational state nodes\r
+ associated with the PAE NID group.";\r
+ uses nid-group;\r
+ }\r
+\r
+}\r
--- /dev/null
+module ieee802-types {
+ namespace urn:ieee:std:802.1Q:yang:ieee802-types;
+ prefix ieee;
+ organization
+ "IEEE 802.1 Working Group";
+ contact
+ "WG-URL: http://ieee802.org/1/
+ WG-EMail: stds-802-1-l@ieee.org
+
+ Contact: IEEE 802.1 Working Group Chair
+ Postal: C/O IEEE 802.1 Working Group
+ IEEE Standards Association
+ 445 Hoes Lane
+ Piscataway, NJ 08854
+ USA
+
+ E-mail: stds-802-1-chairs@ieee.org";
+ description
+ "This module contains a collection of generally useful derived
+ data types for IEEE YANG models.";
+ revision 2020-06-04 {
+ description
+ "Published as part of IEEE Std 802.1Qcx-2020.
+ Second version.";
+ reference
+ "IEEE Std 802.1Qcx-2020, Bridges and Bridged Networks -
+ YANG Data Model for Connectivity Fault Management.";
+ }
+ revision 2018-03-07 {
+ description
+ "Published as part of IEEE Std 802.1Q-2018.
+ Initial version.";
+ reference
+ "IEEE Std 802.1Q-2018, Bridges and Bridged Networks.";
+ }
+
+ typedef mac-address {
+ type string {
+ pattern "[0-9a-fA-F]{2}(-[0-9a-fA-F]{2}){5}";
+ }
+ description
+ "The mac-address type represents a MAC address in the canonical
+ format and hexadecimal format specified by IEEE Std 802. The
+ hexidecimal representation uses uppercase characters.";
+ reference
+ "3.1 of IEEE Std 802-2014
+ 8.1 of IEEE Std 802-2014";
+ }
+
+ typedef chassis-id-subtype-type {
+ type enumeration {
+ enum chassis-component {
+ value 1;
+ description
+ "Represents a chassis identifier based on the value of
+ entPhysicalAlias object (defined in IETF RFC 2737) for a
+ chassis component (i.e., an entPhysicalClass value of
+ chassis(3))";
+ }
+ enum interface-alias {
+ value 2;
+ description
+ "Represents a chassis identifier based on the value of
+ ifAlias object (defined in IETF RFC 2863) for an interface
+ on the containing chassis.";
+ }
+ enum port-component {
+ value 3;
+ description
+ "Represents a chassis identifier based on the value of
+ entPhysicalAlias object (defined in IETF RFC 2737) for a
+ port or backplane component (i.e., entPhysicalClass value of
+ port(10) or backplane(4)), within the containing chassis.";
+ }
+ enum mac-address {
+ value 4;
+ description
+ "Represents a chassis identifier based on the value of a
+ unicast source address (encoded in network byte order and
+ IEEE 802.3 canonical bit order), of a port on the containing
+ chassis as defined in IEEE Std 802-2001.";
+ }
+ enum network-address {
+ value 5;
+ description
+ "Represents a chassis identifier based on a network address,
+ associated with a particular chassis. The encoded address is
+ actually composed of two fields. The first field is a
+ single octet, representing the IANA AddressFamilyNumbers
+ value for the specific address type, and the second field is
+ the network address value.";
+ }
+ enum interface-name {
+ value 6;
+ description
+ "Represents a chassis identifier based on the value of
+ ifName object (defined in IETF RFC 2863) for an interface
+ on the containing chassis.";
+ }
+ enum local {
+ value 7;
+ description
+ "Represents a chassis identifier based on a locally defined
+ value.";
+ }
+ }
+ description
+ "The source of a chassis identifier.";
+ reference
+ "LLDP MIB 20050506";
+ }
+
+ typedef chassis-id-type {
+ type string {
+ length "1..255";
+ }
+ description
+ "The format of a chassis identifier string. Objects of this type
+ are always used with an associated lldp-chassis-is-subtype
+ object, which identifies the format of the particular
+ lldp-chassis-id object instance.
+
+ If the associated lldp-chassis-id-subtype object has a value of
+ chassis-component, then the octet string identifies
+ a particular instance of the entPhysicalAlias object
+ (defined in IETF RFC 2737) for a chassis component (i.e.,
+ an entPhysicalClass value of chassis(3)).
+
+ If the associated lldp-chassis-id-subtype object has a value
+ of interface-alias, then the octet string identifies
+ a particular instance of the ifAlias object (defined in
+ IETF RFC 2863) for an interface on the containing chassis.
+ If the particular ifAlias object does not contain any values,
+ another chassis identifier type should be used.
+
+ If the associated lldp-chassis-id-subtype object has a value
+ of port-component, then the octet string identifies a
+ particular instance of the entPhysicalAlias object (defined
+ in IETF RFC 2737) for a port or backplane component within
+ the containing chassis.
+
+ If the associated lldp-chassis-id-subtype object has a value of
+ mac-address, then this string identifies a particular
+ unicast source address (encoded in network byte order and
+ IEEE 802.3 canonical bit order), of a port on the containing
+ chassis as defined in IEEE Std 802-2001.
+
+ If the associated lldp-chassis-id-subtype object has a value of
+ network-address, then this string identifies a particular
+ network address, encoded in network byte order, associated
+ with one or more ports on the containing chassis. The first
+ octet contains the IANA Address Family Numbers enumeration
+ value for the specific address type, and octets 2 through
+ N contain the network address value in network byte order.
+
+ If the associated lldp-chassis-id-subtype object has a value
+ of interface-name, then the octet string identifies
+ a particular instance of the ifName object (defined in
+ IETF RFC 2863) for an interface on the containing chassis.
+ If the particular ifName object does not contain any values,
+ another chassis identifier type should be used.
+
+ If the associated lldp-chassis-id-subtype object has a value of
+ local, then this string identifies a locally assigned
+ Chassis ID.";
+ reference
+ "LLDP MIB 20050506";
+ }
+
+ typedef port-id-subtype-type {
+ type enumeration {
+ enum interface-alias {
+ value 1;
+ description
+ "Represents a port identifier based on the ifAlias
+ MIB object, defined in IETF RFC 2863.";
+ }
+ enum port-component {
+ value 2;
+ description
+ "Represents a port identifier based on the value of
+ entPhysicalAlias (defined in IETF RFC 2737) for a port
+ component (i.e., entPhysicalClass value of port(10)),
+ within the containing chassis.";
+ }
+ enum mac-address {
+ value 3;
+ description
+ "Represents a port identifier based on a unicast source
+ address (encoded in network byte order and IEEE 802.3
+ canonical bit order), which has been detected by the agent
+ and associated with a particular port (IEEE Std 802-2001).";
+ }
+ enum network-address {
+ value 4;
+ description
+ "Represents a port identifier based on a network address,
+ detected by the agent and associated with a particular
+ port.";
+ }
+ enum interface-name {
+ value 5;
+ description
+ "Represents a port identifier based on the ifName MIB object,
+ defined in IETF RFC 2863.";
+ }
+ enum agent-circuit-id {
+ value 6;
+ description
+ "Represents a port identifier based on the agent-local
+ identifier of the circuit (defined in RFC 3046), detected by
+ the agent and associated with a particular port.";
+ }
+ enum local {
+ value 7;
+ description
+ "Represents a port identifier based on a value locally
+ assigned.";
+ }
+ }
+ description
+ "The source of a particular type of port identifier used
+ in the LLDP YANG module.";
+ }
+
+ typedef port-id-type {
+ type string {
+ length "8";
+ }
+ description
+ "The format of a port identifier string. Objects of this type
+ are always used with an associated lldp-port-id-subtype object,
+ which identifies the format of the particular lldp-port-id
+ object instance.
+
+ If the associated lldp-port-id-subtype object has a value of
+ interface-alias, then the octet string identifies a
+ particular instance of the ifAlias object (defined in IETF
+ RFC 2863). If the particular ifAlias object does not contain
+ any values, another port identifier type should be used.
+
+ If the associated lldp-port-id-subtype object has a value of
+ port-component, then the octet string identifies a
+ particular instance of the entPhysicalAlias object (defined
+ in IETF RFC 2737) for a port or backplane component.
+
+ If the associated lldp-port-id-subtype object has a value of
+ mac-address, then this string identifies a particular
+ unicast source address (encoded in network byte order
+ and IEEE 802.3 canonical bit order) associated with the port
+ (IEEE Std 802-2001).
+
+ If the associated lldp-port-id-subtype object has a value of
+ network-address, then this string identifies a network
+ address associated with the port. The first octet contains
+ the IANA AddressFamilyNumbers enumeration value for the
+ specific address type, and octets 2 through N contain the
+ networkAddress address value in network byte order.
+
+ If the associated lldp-port-id-subtype object has a value of
+ interface-name, then the octet string identifies a
+ particular instance of the ifName object (defined in IETF
+ RFC 2863). If the particular ifName object does not contain
+ any values, another port identifier type should be used.
+
+ If the associated lldp-port-id-subtype object has a value of
+ agent-circuit-id, then this string identifies a agent-local
+ identifier of the circuit (defined in RFC 3046).
+
+ If the associated lldp-port-id-subtype object has a value of
+ local, then this string identifies a locally assigned port ID.";
+ }
+}
--- /dev/null
+module ietf-datastores {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-datastores";
+ prefix ds;
+
+ organization
+ "IETF Network Modeling (NETMOD) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+ Author: Phil Shafer
+ <mailto:phil@juniper.net>
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+ Author: Rob Wilton
+ <rwilton@cisco.com>";
+
+ description
+ "This YANG module defines a set of identities for identifying
+ datastores.
+ 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 8342
+ (https://www.rfc-editor.org/info/rfc8342); see the RFC itself
+ for full legal notices.";
+
+ revision 2018-02-14 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8342: Network Management Datastore Architecture (NMDA)";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity datastore {
+ description
+ "Abstract base identity for datastore identities.";
+ }
+
+ identity conventional {
+ base datastore;
+ description
+ "Abstract base identity for conventional configuration
+ datastores.";
+ }
+
+ identity running {
+ base conventional;
+ description
+ "The running configuration datastore.";
+ }
+
+ identity candidate {
+ base conventional;
+ description
+ "The candidate configuration datastore.";
+ }
+
+ identity startup {
+ base conventional;
+ description
+ "The startup configuration datastore.";
+ }
+
+ identity intended {
+ base conventional;
+ description
+ "The intended configuration datastore.";
+ }
+
+ identity dynamic {
+ base datastore;
+ description
+ "Abstract base identity for dynamic configuration datastores.";
+ }
+
+ identity operational {
+ base datastore;
+ description
+ "The operational state datastore.";
+ }
+
+ /*
+ * Type definitions
+ */
+
+ typedef datastore-ref {
+ type identityref {
+ base datastore;
+ }
+ description
+ "A datastore identity reference.";
+ }
+}
--- /dev/null
+module ietf-dhcpv6-common {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common";
+ prefix "dhcpv6-common";
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ organization "DHC WG";
+ contact
+ "yong@csnet1.cs.tsinghua.edu.cn
+ lh.sunlinh@gmail.com
+ ian.farrer@telekom.de
+ sladjana.zechlin@telekom.de
+ hezihao9512@gmail.com";
+
+ description "This YANG module defines common components
+ used for the configuration and management of DHCPv6.
+
+ Copyright (c) 2021 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).
+
+ This version of this YANG module is part of RFC 8513; see
+ the RFC itself for full legal notices.";
+
+ revision 2021-01-29 {
+ description "Version update for draft -17 publication.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
+ }
+
+ revision 2021-01-06 {
+ description "Version update for draft -16 publication.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
+ }
+
+ revision 2020-12-22 {
+ description "Version update for draft -13 publication.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
+ }
+
+ revision 2020-12-10 {
+ description "Version update for draft -13 publication.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
+ }
+
+ revision 2020-12-01 {
+ description "Version update for draft -12 publication.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
+ }
+
+ revision 2020-05-26 {
+ description "Version update for draft -11 publication and
+ to align revisions across the different modules.";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
+ }
+
+ revision 2018-09-04 {
+ description "";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang";
+ }
+
+ revision 2018-01-30 {
+ description "Initial revision";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang";
+ }
+
+ typedef threshold {
+ type union {
+ type uint16 {
+ range 0..100;
+ }
+ type enumeration {
+ enum "disabled" {
+ description "No threshold";
+ }
+ }
+ }
+ description "Threshold value in percent";
+ }
+
+ typedef timer-seconds32 {
+ type uint32 {
+ range "1..4294967295";
+ }
+ units "seconds";
+ description
+ "Timer value type, in seconds (32-bit range).";
+ }
+
+/*
+* Groupings
+*/
+
+ 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 RFC8415 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL
+ and DUID-UUID. DUID-unstructured represents DUIDs which
+ do not follow any of the defined formats.";
+ reference "RFC8415: Section 11 and RFC6355: Section 4";
+ leaf type-code {
+ type uint16;
+ default 65535;
+ description "Type code of this DUID.";
+ }
+ choice duid-type {
+ default duid-unstructured;
+ description "Selects the format of the DUID.";
+ case duid-llt {
+ description "DUID Based on Link-layer Address Plus Time
+ (Type 1 - DUID-LLT).";
+ reference "RFC8415 Section 11.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 that the DUID is generated
+ represented in seconds since midnight (UTC),
+ January 1, 2000, modulo 2^32.";
+ }
+ leaf duid-llt-link-layer-address {
+ 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 "RFC8415 Section 11.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 "Identifier, unique to the device.";
+ }
+ }
+ case duid-ll {
+ description "DUID Based on Link-layer Address
+ (Type 3 - DUID-LL).";
+ reference "RFC8415 Section 11.4";
+ leaf duid-ll-hardware-type {
+ type uint16;
+ description "Hardware type, as assigned by IANA (RFC826).";
+ }
+ leaf duid-ll-link-layer-address {
+ 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 Definition of the UUID-Based Unique
+ Identifier";
+ leaf uuid {
+ type yang:uuid;
+ description "A Universally Unique Identifier in the string
+ representation, defined in RFC4122. The canonical
+ representation uses lowercase characters.";
+ }
+ }
+ case duid-unstructured {
+ description "DUID which does not follow any of the other
+ structures, expressed as bytes.";
+ leaf data {
+ type binary;
+ description "The bits to be used as the identifier.";
+ }
+ }
+ }
+ leaf active-duid {
+ type binary;
+ config "false";
+ description "The DUID which is currently in use.";
+ }
+ }
+
+ grouping auth-option-group {
+ description "OPTION_AUTH (11) Authentication Option.";
+ reference "RFC8415: Dynamic Host Configuration Protocol
+ for IPv6 (DHCPv6)";
+ container auth-option {
+ description "OPTION_AUTH (11) Authentication Option
+ container.";
+ leaf protocol {
+ type uint8;
+ description "The authentication protocol used in this
+ Authentication option.";
+ }
+ leaf algorithm {
+ type uint8;
+ description "The algorithm used in the authentication
+ protocol.";
+ }
+ leaf rdm {
+ type uint8;
+ description "The replay detection method used
+ in this Authentication option.";
+ }
+ leaf replay-detection {
+ type uint64;
+ description "The replay detection information for the RDM.";
+ }
+ leaf auth-information {
+ type string;
+ description "The authentication information, as specified
+ by the protocol and algorithm used in this Authentication
+ option.";
+ }
+ }
+ }
+ grouping status-code-option-group {
+ description "OPTION_STATUS_CODE (13) Status Code Option.";
+ reference "RFC8415: Dynamic Host Configuration Protocol
+ for IPv6 (DHCPv6)";
+ container status-code-option {
+ description "OPTION_STATUS_CODE (13) Status Code Option
+ container.";
+ leaf status-code {
+ type uint16;
+ description "The numeric code for the status encoded
+ in this option. See the Status Codes registry at
+ <https://www.iana.org/assignments/dhcpv6-parameters>
+ for the current list of status codes.";
+ }
+ leaf status-message {
+ type string;
+ description "A UTF-8 encoded text string suitable for
+ display to an end user. MUST NOT be null-terminated.";
+ }
+ }
+ }
+
+ grouping rapid-commit-option-group {
+ description "OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
+ reference "RFC8415: Dynamic Host Configuration Protocol for
+ IPv6 (DHCPv6)";
+ container rapid-commit-option {
+ presence "Enable sending of this option";
+ description "OPTION_RAPID_COMMIT (14) Rapid Commit Option
+ container.";
+ }
+ }
+
+ grouping vendor-specific-information-option-group {
+ description "OPTION_VENDOR_OPTS (17) Vendor-specific
+ Information Option.";
+ reference "RFC8415: Dynamic Host Configuration Protocol
+ for IPv6 (DHCPv6)";
+ container vendor-specific-information-option {
+ description "OPTION_VENDOR_OPTS (17) Vendor-specific
+ Information Option container.";
+ list vendor-specific-information-option-instances {
+ key enterprise-number;
+ description "The vendor specific information option allows
+ for multiple instances in a single message. Each list entry
+ defines the contents of an instance of the option.";
+ leaf enterprise-number {
+ type uint32;
+ description "The vendor's registered Enterprise Number,
+ as maintained by IANA.";
+ }
+ list vendor-option-data {
+ key sub-option-code;
+ description "Vendor options, interpreted by vendor-specific
+ client/server functions.";
+ leaf sub-option-code {
+ type uint16;
+ description "The code for the sub-option.";
+ }
+ leaf sub-option-data {
+ type string;
+ description "The data area for the sub-option.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping reconfigure-accept-option-group {
+ description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept
+ Option.
+ A client uses the Reconfigure Accept option to announce to
+ the server whether the client is willing to accept Reconfigure
+ messages, and a server uses this option to tell the client
+ whether or not to accept Reconfigure messages. In the absence
+ of this option, the default behavior is that the client is
+ unwilling to accept Reconfigure messages. The presence node
+ is used to enable the option.";
+ reference "RFC8415: Dynamic Host Configuration Protocol
+ for IPv6 (DHCPv6)";
+ container reconfigure-accept-option {
+ presence "Enable sending of this option";
+ description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept
+ Option container.";
+ }
+ }
+}
--- /dev/null
+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-09-04 {
+ description "";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang";
+ }
+
+ 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-Unknown 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 "Identifier, 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 Definition 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-param {
+ 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";
+ }
+ }
+ }
+}
--- /dev/null
+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: <https://datatracker.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+ Editor: Andy Bierman
+ <mailto:andy@yumaworks.com>
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+ Editor: Jie Dong
+ <mailto:jie.dong@huawei.com>
+ Editor: Dan Romascanu
+ <mailto:dromasca@gmail.com>";
+
+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";
+}
+
+}
--- /dev/null
+module ietf-inet-types {
+
+namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+prefix "inet";
+
+organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+ WG Chair: David Kessens
+ <mailto:david.kessens@nsn.com>
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+ Editor: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>";
+
+description
+ "This module contains a collection of generally useful derived
+ YANG data types for Internet addresses and related things.
+ Copyright (c) 2013 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).
+ This version of this YANG module is part of RFC 6991; see
+ the RFC itself for full legal notices.";
+
+revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - ip-address-no-zone
+ - ipv4-address-no-zone
+ - ipv6-address-no-zone";
+ reference
+ "RFC 6991: Common YANG Data Types";
+}
+
+revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+}
+
+/*** collection of types related to protocol fields ***/
+
+typedef ip-version {
+ type enumeration {
+ enum unknown {
+ value "0";
+ description
+ "An unknown or unspecified version of the Internet
+ protocol.";
+ }
+ enum ipv4 {
+ value "1";
+ description
+ "The IPv4 protocol as defined in RFC 791.";
+ }
+ enum ipv6 {
+ value "2";
+ description
+ "The IPv6 protocol as defined in RFC 2460.";
+ }
+ }
+ description
+ "This value represents the version of the IP protocol.
+ In the value set and its semantics, this type is equivalent
+ to the InetVersion textual convention of the SMIv2.";
+ reference
+ "RFC 791: Internet Protocol
+ RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+ RFC 4001: Textual Conventions for Internet Network Addresses";
+}
+
+typedef dscp {
+ type uint8 {
+ range "0..63";
+ }
+ description
+ "The dscp type represents a Differentiated Services Code Point
+ that may be used for marking packets in a traffic stream.
+ In the value set and its semantics, this type is equivalent
+ to the Dscp textual convention of the SMIv2.";
+ reference
+ "RFC 3289: Management Information Base for the Differentiated
+ Services Architecture
+ RFC 2474: Definition of the Differentiated Services Field
+ (DS Field) in the IPv4 and IPv6 Headers
+ RFC 2780: IANA Allocation Guidelines For Values In
+ the Internet Protocol and Related Headers";
+}
+
+typedef ipv6-flow-label {
+ type uint32 {
+ range "0..1048575";
+ }
+ description
+ "The ipv6-flow-label type represents the flow identifier or Flow
+ Label in an IPv6 packet header that may be used to
+ discriminate traffic flows.
+ In the value set and its semantics, this type is equivalent
+ to the IPv6FlowLabel textual convention of the SMIv2.";
+ reference
+ "RFC 3595: Textual Conventions for IPv6 Flow Label
+ RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+}
+
+typedef port-number {
+ type uint16 {
+ range "0..65535";
+ }
+ description
+ "The port-number type represents a 16-bit port number of an
+ Internet transport-layer protocol such as UDP, TCP, DCCP, or
+ SCTP. Port numbers are assigned by IANA. A current list of
+ all assignments is available from <http://www.iana.org/>.
+ Note that the port number value zero is reserved by IANA. In
+ situations where the value zero does not make sense, it can
+ be excluded by subtyping the port-number type.
+ In the value set and its semantics, this type is equivalent
+ to the InetPortNumber textual convention of the SMIv2.";
+ reference
+ "RFC 768: User Datagram Protocol
+ RFC 793: Transmission Control Protocol
+ RFC 4960: Stream Control Transmission Protocol
+ RFC 4340: Datagram Congestion Control Protocol (DCCP)
+ RFC 4001: Textual Conventions for Internet Network Addresses";
+}
+
+/*** collection of types related to autonomous systems ***/
+
+typedef as-number {
+ type uint32;
+ description
+ "The as-number type represents autonomous system numbers
+ which identify an Autonomous System (AS). An AS is a set
+ of routers under a single technical administration, using
+ an interior gateway protocol and common metrics to route
+ packets within the AS, and using an exterior gateway
+ protocol to route packets to other ASes. IANA maintains
+ the AS number space and has delegated large parts to the
+ regional registries.
+ Autonomous system numbers were originally limited to 16
+ bits. BGP extensions have enlarged the autonomous system
+ number space to 32 bits. This type therefore uses an uint32
+ base type without a range restriction in order to support
+ a larger autonomous system number space.
+ In the value set and its semantics, this type is equivalent
+ to the InetAutonomousSystemNumber textual convention of
+ the SMIv2.";
+ reference
+ "RFC 1930: Guidelines for creation, selection, and registration
+ of an Autonomous System (AS)
+ RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+ RFC 4001: Textual Conventions for Internet Network Addresses
+ RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+ Number Space";
+}
+
+/*** collection of types related to IP addresses and hostnames ***/
+
+typedef ip-address {
+ type union {
+ type inet:ipv4-address;
+ type inet:ipv6-address;
+ }
+ description
+ "The ip-address type represents an IP address and is IP
+ version neutral. The format of the textual representation
+ implies the IP version. This type supports scoped addresses
+ by allowing zone identifiers in the address format.";
+ reference
+ "RFC 4007: IPv6 Scoped Address Architecture";
+}
+
+typedef ipv4-address {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ + '(%[\p{N}\p{L}]+)?';
+ }
+ description
+ "The ipv4-address type represents an IPv4 address in
+ dotted-quad notation. The IPv4 address may include a zone
+ index, separated by a % sign.
+ The zone index is used to disambiguate identical address
+ values. For link-local addresses, the zone index will
+ typically be the interface index number or the name of an
+ interface. If the zone index is not present, the default
+ zone of the device will be used.
+ The canonical format for the zone index is the numerical
+ format";
+}
+
+typedef ipv6-address {
+ type string {
+ pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ + '(%[\p{N}\p{L}]+)?';
+ pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ + '(%.+)?';
+ }
+ description
+ "The ipv6-address type represents an IPv6 address in full,
+ mixed, shortened, and shortened-mixed notation. The IPv6
+ address may include a zone index, separated by a % sign.
+ The zone index is used to disambiguate identical address
+ values. For link-local addresses, the zone index will
+ typically be the interface index number or the name of an
+ interface. If the zone index is not present, the default
+ zone of the device will be used.
+ The canonical format of IPv6 addresses uses the textual
+ representation defined in Section 4 of RFC 5952. The
+ canonical format for the zone index is the numerical
+ format as described in Section 11.2 of RFC 4007.";
+ reference
+ "RFC 4291: IP Version 6 Addressing Architecture
+ RFC 4007: IPv6 Scoped Address Architecture
+ RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+}
+
+typedef ip-address-no-zone {
+ type union {
+ type inet:ipv4-address-no-zone;
+ type inet:ipv6-address-no-zone;
+ }
+ description
+ "The ip-address-no-zone type represents an IP address and is
+ IP version neutral. The format of the textual representation
+ implies the IP version. This type does not support scoped
+ addresses since it does not allow zone identifiers in the
+ address format.";
+ reference
+ "RFC 4007: IPv6 Scoped Address Architecture";
+}
+
+typedef ipv4-address-no-zone {
+ type inet:ipv4-address {
+ pattern '[0-9\.]*';
+ }
+ description
+ "An IPv4 address without a zone index. This type, derived from
+ ipv4-address, may be used in situations where the zone is
+ known from the context and hence no zone index is needed.";
+}
+
+typedef ipv6-address-no-zone {
+ type inet:ipv6-address {
+ pattern '[0-9a-fA-F:\.]*';
+ }
+ description
+ "An IPv6 address without a zone index. This type, derived from
+ ipv6-address, may be used in situations where the zone is
+ known from the context and hence no zone index is needed.";
+ reference
+ "RFC 4291: IP Version 6 Addressing Architecture
+ RFC 4007: IPv6 Scoped Address Architecture
+ RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+}
+
+typedef ip-prefix {
+ type union {
+ type inet:ipv4-prefix;
+ type inet:ipv6-prefix;
+ }
+ description
+ "The ip-prefix type represents an IP prefix and is IP
+ version neutral. The format of the textual representations
+ implies the IP version.";
+}
+
+typedef ipv4-prefix {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+ }
+ description
+ "The ipv4-prefix type represents an IPv4 address prefix.
+ The prefix length is given by the number following the
+ slash character and must be less than or equal to 32.
+ A prefix length value of n corresponds to an IP address
+ mask that has n contiguous 1-bits from the most
+ significant bit (MSB) and all other bits set to 0.
+ The canonical format of an IPv4 prefix has all bits of
+ the IPv4 address set to zero that are not part of the
+ IPv4 prefix.";
+}
+
+typedef ipv6-prefix {
+ type string {
+ pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+ pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ + '(/.+)';
+ }
+
+ description
+ "The ipv6-prefix type represents an IPv6 address prefix.
+ The prefix length is given by the number following the
+ slash character and must be less than or equal to 128.
+ A prefix length value of n corresponds to an IP address
+ mask that has n contiguous 1-bits from the most
+ significant bit (MSB) and all other bits set to 0.
+ The IPv6 address should have all bits that do not belong
+ to the prefix set to zero.
+ The canonical format of an IPv6 prefix has all bits of
+ the IPv6 address set to zero that are not part of the
+ IPv6 prefix. Furthermore, the IPv6 address is represented
+ as defined in Section 4 of RFC 5952.";
+ reference
+ "RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+}
+
+/*** collection of domain name and URI types ***/
+
+typedef domain-name {
+ type string {
+ pattern
+ '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+ + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+ + '|\.';
+ length "1..253";
+ }
+ description
+ "The domain-name type represents a DNS domain name. The
+ name SHOULD be fully qualified whenever possible.
+ Internet domain names are only loosely specified. Section
+ 3.5 of RFC 1034 recommends a syntax (modified in Section
+ 2.1 of RFC 1123). The pattern above is intended to allow
+ for current practice in domain name use, and some possible
+ future expansion. It is designed to hold various types of
+ domain names, including names used for A or AAAA records
+ (host names) and other records, such as SRV records. Note
+ that Internet host names have a stricter syntax (described
+ in RFC 952) than the DNS recommendations in RFCs 1034 and
+ 1123, and that systems that want to store host names in
+ schema nodes using the domain-name type are recommended to
+ adhere to this stricter standard to ensure interoperability.
+ The encoding of DNS names in the DNS protocol is limited
+ to 255 characters. Since the encoding consists of labels
+ prefixed by a length bytes and there is a trailing NULL
+ byte, only 253 characters can appear in the textual dotted
+ notation.
+ The description clause of schema nodes using the domain-name
+ type MUST describe when and how these names are resolved to
+ IP addresses. Note that the resolution of a domain-name value
+ may require to query multiple DNS records (e.g., A for IPv4
+ and AAAA for IPv6). The order of the resolution process and
+ which DNS record takes precedence can either be defined
+ explicitly or may depend on the configuration of the
+ resolver.
+ Domain-name values use the US-ASCII encoding. Their canonical
+ format uses lowercase US-ASCII characters. Internationalized
+ domain names MUST be A-labels as per RFC 5890.";
+ reference
+ "RFC 952: DoD Internet Host Table Specification
+ RFC 1034: Domain Names - Concepts and Facilities
+ RFC 1123: Requirements for Internet Hosts -- Application
+ and Support
+ RFC 2782: A DNS RR for specifying the location of services
+ (DNS SRV)
+ RFC 5890: Internationalized Domain Names in Applications
+ (IDNA): Definitions and Document Framework";
+}
+
+typedef host {
+ type union {
+ type inet:ip-address;
+ type inet:domain-name;
+ }
+ description
+ "The host type represents either an IP address or a DNS
+ domain name.";
+}
+
+typedef uri {
+ type string;
+ description
+ "The uri type represents a Uniform Resource Identifier
+ (URI) as defined by STD 66.
+ Objects using the uri type MUST be in US-ASCII encoding,
+ and MUST be normalized as described by RFC 3986 Sections
+ 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
+ percent-encoding is removed, and all case-insensitive
+ characters are set to lowercase except for hexadecimal
+ digits, which are normalized to uppercase as described in
+ Section 6.2.2.1.
+ The purpose of this normalization is to help provide
+ unique URIs. Note that this normalization is not
+ sufficient to provide uniqueness. Two URIs that are
+ textually distinct after this normalization may still be
+ equivalent.
+ Objects using the uri type may restrict the schemes that
+ they permit. For example, 'data:' and 'urn:' schemes
+ might not be appropriate.
+ A zero-length URI is not a valid URI. This can be used to
+ express 'URI absent' where required.
+ In the value set and its semantics, this type is equivalent
+ to the Uri SMIv2 textual convention defined in RFC 5017.";
+ reference
+ "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+ RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+ Group: Uniform Resource Identifiers (URIs), URLs,
+ and Uniform Resource Names (URNs): Clarifications
+ and Recommendations
+ RFC 5017: MIB Textual Conventions for Uniform Resource
+ Identifiers (URIs)";
+}
+
+}
--- /dev/null
+module ietf-netconf-acm {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+
+ prefix nacm;
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netconf/>
+ WG List: <mailto:netconf@ietf.org>
+ Author: Andy Bierman
+ <mailto:andy@yumaworks.com>
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>";
+
+ description
+ "Network Configuration Access Control Model.
+ Copyright (c) 2012 - 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 8341; see
+ the RFC itself for full legal notices.";
+
+ revision "2018-02-14" {
+ description
+ "Added support for YANG 1.1 actions and notifications tied to
+ data nodes. Clarified how NACM extensions can be used by
+ other data models.";
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ revision "2012-02-22" {
+ description
+ "Initial version.";
+ reference
+ "RFC 6536: Network Configuration Protocol (NETCONF)
+ Access Control Model";
+ }
+
+ /*
+ * Extension statements
+ */
+
+ extension default-deny-write {
+ description
+ "Used to indicate that the data model node
+ represents a sensitive security system parameter.
+ If present, the NETCONF server will only allow the designated
+ 'recovery session' to have write access to the node. An
+ explicit access control rule is required for all other users.
+ If the NACM module is used, then it must be enabled (i.e.,
+ /nacm/enable-nacm object equals 'true'), or this extension
+ is ignored.
+ The 'default-deny-write' extension MAY appear within a data
+ definition statement. It is ignored otherwise.";
+ }
+
+ extension default-deny-all {
+ description
+ "Used to indicate that the data model node
+ controls a very sensitive security system parameter.
+ If present, the NETCONF server will only allow the designated
+ 'recovery session' to have read, write, or execute access to
+ the node. An explicit access control rule is required for all
+ other users.
+ If the NACM module is used, then it must be enabled (i.e.,
+ /nacm/enable-nacm object equals 'true'), or this extension
+ is ignored.
+ The 'default-deny-all' extension MAY appear within a data
+ definition statement, 'rpc' statement, or 'notification'
+ statement. It is ignored otherwise.";
+ }
+
+ /*
+ * Derived types
+ */
+
+ typedef user-name-type {
+ type string {
+ length "1..max";
+ }
+ description
+ "General-purpose username string.";
+ }
+
+ typedef matchall-string-type {
+ type string {
+ pattern '\*';
+ }
+ description
+ "The string containing a single asterisk '*' is used
+ to conceptually represent all possible values
+ for the particular leaf using this data type.";
+ }
+
+ typedef access-operations-type {
+ type bits {
+ bit create {
+ description
+ "Any protocol operation that creates a
+ new data node.";
+ }
+ bit read {
+ description
+ "Any protocol operation or notification that
+ returns the value of a data node.";
+ }
+ bit update {
+ description
+ "Any protocol operation that alters an existing
+ data node.";
+ }
+ bit delete {
+ description
+ "Any protocol operation that removes a data node.";
+ }
+ bit exec {
+ description
+ "Execution access to the specified protocol operation.";
+ }
+ }
+ description
+ "Access operation.";
+ }
+
+ typedef group-name-type {
+ type string {
+ length "1..max";
+ pattern '[^\*].*';
+ }
+ description
+ "Name of administrative group to which
+ users can be assigned.";
+ }
+
+ typedef action-type {
+ type enumeration {
+ enum permit {
+ description
+ "Requested action is permitted.";
+ }
+ enum deny {
+ description
+ "Requested action is denied.";
+ }
+ }
+ description
+ "Action taken by the server when a particular
+ rule matches.";
+ }
+
+ typedef node-instance-identifier {
+ type yang:xpath1.0;
+ description
+ "Path expression used to represent a special
+ data node, action, or notification instance-identifier
+ string.
+ A node-instance-identifier value is an
+ unrestricted YANG instance-identifier expression.
+ All the same rules as an instance-identifier apply,
+ except that predicates for keys are optional. If a key
+ predicate is missing, then the node-instance-identifier
+ represents all possible server instances for that key.
+ This XML Path Language (XPath) expression is evaluated in the
+ following context:
+ o The set of namespace declarations are those in scope on
+ the leaf element where this type is used.
+ o The set of variable bindings contains one variable,
+ 'USER', which contains the name of the user of the
+ current session.
+ o The function library is the core function library, but
+ note that due to the syntax restrictions of an
+ instance-identifier, no functions are allowed.
+ o The context node is the root node in the data tree.
+ The accessible tree includes actions and notifications tied
+ to data nodes.";
+ }
+
+ /*
+ * Data definition statements
+ */
+
+ container nacm {
+ nacm:default-deny-all;
+
+ description
+ "Parameters for NETCONF access control model.";
+
+ leaf enable-nacm {
+ type boolean;
+ default "true";
+ description
+ "Enables or disables all NETCONF access control
+ enforcement. If 'true', then enforcement
+ is enabled. If 'false', then enforcement
+ is disabled.";
+ }
+
+ leaf read-default {
+ type action-type;
+ default "permit";
+ description
+ "Controls whether read access is granted if
+ no appropriate rule is found for a
+ particular read request.";
+ }
+
+ leaf write-default {
+ type action-type;
+ default "deny";
+ description
+ "Controls whether create, update, or delete access
+ is granted if no appropriate rule is found for a
+ particular write request.";
+ }
+
+ leaf exec-default {
+ type action-type;
+ default "permit";
+ description
+ "Controls whether exec access is granted if no appropriate
+ rule is found for a particular protocol operation request.";
+ }
+
+ leaf enable-external-groups {
+ type boolean;
+ default "true";
+ description
+ "Controls whether the server uses the groups reported by the
+ NETCONF transport layer when it assigns the user to a set of
+ NACM groups. If this leaf has the value 'false', any group
+ names reported by the transport layer are ignored by the
+ server.";
+ }
+
+ leaf denied-operations {
+ type yang:zero-based-counter32;
+ config false;
+ mandatory true;
+ description
+ "Number of times since the server last restarted that a
+ protocol operation request was denied.";
+ }
+
+ leaf denied-data-writes {
+ type yang:zero-based-counter32;
+ config false;
+ mandatory true;
+ description
+ "Number of times since the server last restarted that a
+ protocol operation request to alter
+ a configuration datastore was denied.";
+ }
+
+ leaf denied-notifications {
+ type yang:zero-based-counter32;
+ config false;
+ mandatory true;
+ description
+ "Number of times since the server last restarted that
+ a notification was dropped for a subscription because
+ access to the event type was denied.";
+ }
+
+ container groups {
+ description
+ "NETCONF access control groups.";
+
+ list group {
+ key name;
+
+ description
+ "One NACM group entry. This list will only contain
+ configured entries, not any entries learned from
+ any transport protocols.";
+
+ leaf name {
+ type group-name-type;
+ description
+ "Group name associated with this entry.";
+ }
+
+ leaf-list user-name {
+ type user-name-type;
+ description
+ "Each entry identifies the username of
+ a member of the group associated with
+ this entry.";
+ }
+ }
+ }
+
+ list rule-list {
+ key name;
+ ordered-by user;
+ description
+ "An ordered collection of access control rules.";
+
+ leaf name {
+ type string {
+ length "1..max";
+ }
+ description
+ "Arbitrary name assigned to the rule-list.";
+ }
+ leaf-list group {
+ type union {
+ type matchall-string-type;
+ type group-name-type;
+ }
+ description
+ "List of administrative groups that will be
+ assigned the associated access rights
+ defined by the 'rule' list.
+ The string '*' indicates that all groups apply to the
+ entry.";
+ }
+
+ list rule {
+ key name;
+ ordered-by user;
+ description
+ "One access control rule.
+ Rules are processed in user-defined order until a match is
+ found. A rule matches if 'module-name', 'rule-type', and
+ 'access-operations' match the request. If a rule
+ matches, the 'action' leaf determines whether or not
+ access is granted.";
+
+ leaf name {
+ type string {
+ length "1..max";
+ }
+ description
+ "Arbitrary name assigned to the rule.";
+ }
+
+ leaf module-name {
+ type union {
+ type matchall-string-type;
+ type string;
+ }
+ default "*";
+ description
+ "Name of the module associated with this rule.
+ This leaf matches if it has the value '*' or if the
+ object being accessed is defined in the module with the
+ specified module name.";
+ }
+ choice rule-type {
+ description
+ "This choice matches if all leafs present in the rule
+ match the request. If no leafs are present, the
+ choice matches all requests.";
+ case protocol-operation {
+ leaf rpc-name {
+ type union {
+ type matchall-string-type;
+ type string;
+ }
+ description
+ "This leaf matches if it has the value '*' or if
+ its value equals the requested protocol operation
+ name.";
+ }
+ }
+ case notification {
+ leaf notification-name {
+ type union {
+ type matchall-string-type;
+ type string;
+ }
+ description
+ "This leaf matches if it has the value '*' or if its
+ value equals the requested notification name.";
+ }
+ }
+
+ case data-node {
+ leaf path {
+ type node-instance-identifier;
+ mandatory true;
+ description
+ "Data node instance-identifier associated with the
+ data node, action, or notification controlled by
+ this rule.
+ Configuration data or state data
+ instance-identifiers start with a top-level
+ data node. A complete instance-identifier is
+ required for this type of path value.
+ The special value '/' refers to all possible
+ datastore contents.";
+ }
+ }
+ }
+
+ leaf access-operations {
+ type union {
+ type matchall-string-type;
+ type access-operations-type;
+ }
+ default "*";
+ description
+ "Access operations associated with this rule.
+ This leaf matches if it has the value '*' or if the
+ bit corresponding to the requested operation is set.";
+ }
+
+ leaf action {
+ type action-type;
+ mandatory true;
+ description
+ "The access control action associated with the
+ rule. If a rule has been determined to match a
+ particular request, then this object is used
+ to determine whether to permit or deny the
+ request.";
+ }
+
+ leaf comment {
+ type string;
+ description
+ "A textual description of the access rule.";
+ }
+ }
+ }
+ }
+}
--- /dev/null
+module ietf-netconf-notifications {
+
+ namespace
+ "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";
+
+ prefix ncn;
+
+ import ietf-inet-types { prefix inet; }
+ import ietf-netconf { prefix nc; }
+
+ organization
+ "IETF NETCONF (Network Configuration Protocol) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netconf/>
+ WG List: <mailto:netconf@ietf.org>
+ WG Chair: Bert Wijnen
+ <mailto:bertietf@bwijnen.net>
+ WG Chair: Mehmet Ersue
+ <mailto:mehmet.ersue@nsn.com>
+ Editor: Andy Bierman
+ <mailto:andy@netconfcentral.org>";
+
+ description
+ "This module defines a YANG data model for use with the
+ NETCONF protocol that allows the NETCONF client to
+ receive common NETCONF base event notifications.
+ Copyright (c) 2012 IETF Trust and the persons identified as
+ the document authors. 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).
+ This version of this YANG module is part of RFC 6470; see
+ the RFC itself for full legal notices.";
+
+ revision "2012-02-06" {
+ description
+ "Initial version.";
+ reference
+ "RFC 6470: NETCONF Base Notifications";
+ }
+
+ grouping common-session-parms {
+ description
+ "Common session parameters to identify a
+ management session.";
+
+ leaf username {
+ type string;
+ mandatory true;
+ description
+ "Name of the user for the session.";
+ }
+
+ leaf session-id {
+ type nc:session-id-or-zero-type;
+ mandatory true;
+ description
+ "Identifier of the session.
+ A NETCONF session MUST be identified by a non-zero value.
+ A non-NETCONF session MAY be identified by the value zero.";
+ }
+
+ leaf source-host {
+ type inet:ip-address;
+ description
+ "Address of the remote host for the session.";
+ }
+ }
+
+ grouping changed-by-parms {
+ description
+ "Common parameters to identify the source
+ of a change event, such as a configuration
+ or capability change.";
+
+ container changed-by {
+ description
+ "Indicates the source of the change.
+ If caused by internal action, then the
+ empty leaf 'server' will be present.
+ If caused by a management session, then
+ the name, remote host address, and session ID
+ of the session that made the change will be reported.";
+ choice server-or-user {
+ mandatory true;
+ leaf server {
+ type empty;
+ description
+ "If present, the change was caused
+ by the server.";
+ }
+
+ case by-user {
+ uses common-session-parms;
+ }
+ } // choice server-or-user
+ } // container changed-by-parms
+ }
+
+ notification netconf-config-change {
+ description
+ "Generated when the NETCONF server detects that the
+ <running> or <startup> configuration datastore
+ has been changed by a management session.
+ The notification summarizes the edits that
+ have been detected.
+ The server MAY choose to also generate this
+ notification while loading a datastore during the
+ boot process for the device.";
+
+ uses changed-by-parms;
+
+ leaf datastore {
+ type enumeration {
+ enum running {
+ description "The <running> datastore has changed.";
+ }
+ enum startup {
+ description "The <startup> datastore has changed";
+ }
+ }
+ default "running";
+ description
+ "Indicates which configuration datastore has changed.";
+ }
+
+ list edit {
+ description
+ "An edit record SHOULD be present for each distinct
+ edit operation that the server has detected on
+ the target datastore. This list MAY be omitted
+ if the detailed edit operations are not known.
+ The server MAY report entries in this list for
+ changes not made by a NETCONF session (e.g., CLI).";
+
+ leaf target {
+ type instance-identifier;
+ description
+ "Topmost node associated with the configuration change.
+ A server SHOULD set this object to the node within
+ the datastore that is being altered. A server MAY
+ set this object to one of the ancestors of the actual
+ node that was changed, or omit this object, if the
+ exact node is not known.";
+ }
+
+ leaf operation {
+ type nc:edit-operation-type;
+ description
+ "Type of edit operation performed.
+ A server MUST set this object to the NETCONF edit
+ operation performed on the target datastore.";
+ }
+ } // list edit
+ } // notification netconf-config-change
+
+ notification netconf-capability-change {
+ description
+ "Generated when the NETCONF server detects that
+ the server capabilities have changed.
+ Indicates which capabilities have been added, deleted,
+ and/or modified. The manner in which a server
+ capability is changed is outside the scope of this
+ document.";
+
+ uses changed-by-parms;
+
+ leaf-list added-capability {
+ type inet:uri;
+ description
+ "List of capabilities that have just been added.";
+ }
+
+ leaf-list deleted-capability {
+ type inet:uri;
+ description
+ "List of capabilities that have just been deleted.";
+ }
+
+ leaf-list modified-capability {
+ type inet:uri;
+ description
+ "List of capabilities that have just been modified.
+ A capability is considered to be modified if the
+ base URI for the capability has not changed, but
+ one or more of the parameters encoded at the end of
+ the capability URI have changed.
+ The new modified value of the complete URI is returned.";
+ }
+ } // notification netconf-capability-change
+
+ notification netconf-session-start {
+ description
+ "Generated when a NETCONF server detects that a
+ NETCONF session has started. A server MAY generate
+ this event for non-NETCONF management sessions.
+ Indicates the identity of the user that started
+ the session.";
+ uses common-session-parms;
+ } // notification netconf-session-start
+
+ notification netconf-session-end {
+ description
+ "Generated when a NETCONF server detects that a
+ NETCONF session has terminated.
+ A server MAY optionally generate this event for
+ non-NETCONF management sessions. Indicates the
+ identity of the user that owned the session,
+ and why the session was terminated.";
+
+ uses common-session-parms;
+
+ leaf killed-by {
+ when "../termination-reason = 'killed'";
+ type nc:session-id-type;
+ description
+ "The ID of the session that directly caused this session
+ to be abnormally terminated. If this session was abnormally
+ terminated by a non-NETCONF session unknown to the server,
+ then this leaf will not be present.";
+ }
+
+ leaf termination-reason {
+ type enumeration {
+ enum "closed" {
+ description
+ "The session was terminated by the client in normal
+ fashion, e.g., by the NETCONF <close-session>
+ protocol operation.";
+ }
+ enum "killed" {
+ description
+ "The session was terminated in abnormal
+ fashion, e.g., by the NETCONF <kill-session>
+ protocol operation.";
+ }
+ enum "dropped" {
+ description
+ "The session was terminated because the transport layer
+ connection was unexpectedly closed.";
+ }
+ enum "timeout" {
+ description
+ "The session was terminated because of inactivity,
+ e.g., waiting for the <hello> message or <rpc>
+ messages.";
+ }
+
+ enum "bad-hello" {
+ description
+ "The client's <hello> message was invalid.";
+ }
+ enum "other" {
+ description
+ "The session was terminated for some other reason.";
+ }
+ }
+ mandatory true;
+ description
+ "Reason the session was terminated.";
+ }
+ } // notification netconf-session-end
+
+ notification netconf-confirmed-commit {
+ description
+ "Generated when a NETCONF server detects that a
+ confirmed-commit event has occurred. Indicates the event
+ and the current state of the confirmed-commit procedure
+ in progress.";
+ reference
+ "RFC 6241, Section 8.4";
+
+ uses common-session-parms {
+ when "../confirm-event != 'timeout'";
+ }
+
+ leaf confirm-event {
+ type enumeration {
+ enum "start" {
+ description
+ "The confirmed-commit procedure has started.";
+ }
+ enum "cancel" {
+ description
+ "The confirmed-commit procedure has been canceled,
+ e.g., due to the session being terminated, or an
+ explicit <cancel-commit> operation.";
+ }
+ enum "timeout" {
+ description
+ "The confirmed-commit procedure has been canceled
+ due to the confirm-timeout interval expiring.
+ The common session parameters will not be present
+ in this sub-mode.";
+ }
+ enum "extend" {
+ description
+ "The confirmed-commit timeout has been extended,
+ e.g., by a new <confirmed-commit> operation.";
+ }
+ enum "complete" {
+ description
+ "The confirmed-commit procedure has been completed.";
+ }
+ }
+ mandatory true;
+ description
+ "Indicates the event that caused the notification.";
+ }
+
+ leaf timeout {
+ when
+ "../confirm-event = 'start' or ../confirm-event = 'extend'";
+ type uint32;
+ units "seconds";
+ description
+ "The configured timeout value if the event type
+ is 'start' or 'extend'. This value represents
+ the approximate number of seconds from the event
+ time when the 'timeout' event might occur.";
+ }
+ } // notification netconf-confirmed-commit
+
+}
--- /dev/null
+module ietf-restconf {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-restconf";
+ prefix "rc";
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netconf/>
+ WG List: <mailto:netconf@ietf.org>
+
+ Author: Andy Bierman
+ <mailto:andy@yumaworks.com>
+
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>";
+
+ description
+ "This module contains conceptual YANG specifications
+ for basic RESTCONF media type definitions used in
+ RESTCONF protocol messages.
+
+ Note that the YANG definitions within this module do not
+ represent configuration data of any kind.
+ The 'restconf-media-type' YANG extension statement
+ provides a normative syntax for XML and JSON
+ message-encoding purposes.
+
+
+
+ Copyright (c) 2017 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).
+
+ This version of this YANG module is part of RFC 8040; see
+ the RFC itself for full legal notices.";
+
+ revision 2017-01-26 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8040: RESTCONF Protocol.";
+ }
+
+ extension yang-data {
+ argument name {
+ yin-element true;
+ }
+ description
+ "This extension is used to specify a YANG data template that
+ represents conceptual data defined in YANG. It is
+ intended to describe hierarchical data independent of
+ protocol context or specific message-encoding format.
+ Data definition statements within a yang-data extension
+ specify the generic syntax for the specific YANG data
+ template, whose name is the argument of the 'yang-data'
+ extension statement.
+
+ Note that this extension does not define a media type.
+ A specification using this extension MUST specify the
+ message-encoding rules, including the content media type.
+
+ The mandatory 'name' parameter value identifies the YANG
+ data template that is being defined. It contains the
+ template name.
+
+ This extension is ignored unless it appears as a top-level
+ statement. It MUST contain data definition statements
+ that result in exactly one container data node definition.
+ An instance of a YANG data template can thus be translated
+ into an XML instance document, whose top-level element
+ corresponds to the top-level container.
+
+ The module name and namespace values for the YANG module using
+ the extension statement are assigned to instance document data
+ conforming to the data definition statements within
+ this extension.
+
+ The substatements of this extension MUST follow the
+ 'data-def-stmt' rule in the YANG ABNF.
+
+ The XPath document root is the extension statement itself,
+ such that the child nodes of the document root are
+ represented by the data-def-stmt substatements within
+ this extension. This conceptual document is the context
+ for the following YANG statements:
+
+ - must-stmt
+ - when-stmt
+ - path-stmt
+ - min-elements-stmt
+ - max-elements-stmt
+ - mandatory-stmt
+ - unique-stmt
+ - ordered-by
+ - instance-identifier data type
+
+ The following data-def-stmt substatements are constrained
+ when used within a 'yang-data' extension statement.
+
+ - The list-stmt is not required to have a key-stmt defined.
+ - The if-feature-stmt is ignored if present.
+ - The config-stmt is ignored if present.
+ - The available identity values for any 'identityref'
+ leaf or leaf-list nodes are limited to the module
+ containing this extension statement and the modules
+ imported into that module.
+ ";
+ }
+
+ rc:yang-data yang-errors {
+ uses errors;
+ }
+
+ rc:yang-data yang-api {
+ uses restconf;
+ }
+
+ grouping errors {
+ description
+ "A grouping that contains a YANG container
+ representing the syntax and semantics of a
+ YANG Patch error report within a response message.";
+
+ container errors {
+ description
+ "Represents an error report returned by the server if
+ a request results in an error.";
+
+ list error {
+ description
+ "An entry containing information about one
+ specific error that occurred while processing
+ a RESTCONF request.";
+ reference
+ "RFC 6241, Section 4.3.";
+
+ leaf error-type {
+ type enumeration {
+ enum transport {
+ description
+ "The transport layer.";
+ }
+ enum rpc {
+ description
+ "The rpc or notification layer.";
+ }
+ enum protocol {
+ description
+ "The protocol operation layer.";
+ }
+ enum application {
+ description
+ "The server application layer.";
+ }
+ }
+ mandatory true;
+ description
+ "The protocol layer where the error occurred.";
+ }
+
+ leaf error-tag {
+ type string;
+ mandatory true;
+ description
+ "The enumerated error-tag.";
+ }
+
+ leaf error-app-tag {
+ type string;
+ description
+ "The application-specific error-tag.";
+ }
+
+ leaf error-path {
+ type instance-identifier;
+ description
+ "The YANG instance identifier associated
+ with the error node.";
+ }
+
+ leaf error-message {
+ type string;
+ description
+ "A message describing the error.";
+ }
+
+ anydata error-info {
+ description
+ "This anydata value MUST represent a container with
+ zero or more data nodes representing additional
+ error information.";
+ }
+ }
+ }
+ }
+
+ grouping restconf {
+ description
+ "Conceptual grouping representing the RESTCONF
+ root resource.";
+
+ container restconf {
+ description
+ "Conceptual container representing the RESTCONF
+ root resource.";
+
+ container data {
+ description
+ "Container representing the datastore resource.
+ Represents the conceptual root of all state data
+ and configuration data supported by the server.
+ The child nodes of this container can be any data
+ resources that are defined as top-level data nodes
+ from the YANG modules advertised by the server in
+ the 'ietf-yang-library' module.";
+ }
+
+ container operations {
+ description
+ "Container for all operation resources.
+
+ Each resource is represented as an empty leaf with the
+ name of the RPC operation from the YANG 'rpc' statement.
+
+ For example, the 'system-restart' RPC operation defined
+ in the 'ietf-system' module would be represented as
+ an empty leaf in the 'ietf-system' namespace. This is
+ a conceptual leaf and will not actually be found in
+ the module:
+
+ module ietf-system {
+ leaf system-reset {
+ type empty;
+ }
+ }
+
+ To invoke the 'system-restart' RPC operation:
+
+ POST /restconf/operations/ietf-system:system-restart
+
+ To discover the RPC operations supported by the server:
+
+ GET /restconf/operations
+
+ In XML, the YANG module namespace identifies the module:
+
+ <system-restart
+ xmlns='urn:ietf:params:xml:ns:yang:ietf-system'/>
+
+ In JSON, the YANG module name identifies the module:
+
+ { 'ietf-system:system-restart' : [null] }
+ ";
+ }
+
+ leaf yang-library-version {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}';
+ }
+ config false;
+ mandatory true;
+ description
+ "Identifies the revision date of the 'ietf-yang-library'
+ module that is implemented by this RESTCONF server.
+ Indicates the year, month, and day in YYYY-MM-DD
+ numeric format.";
+ }
+ }
+ }
+
+}
--- /dev/null
+module ietf-system {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-system";
+ prefix "sys";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ }
+
+ import iana-crypt-hash {
+ prefix ianach;
+ }
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: Thomas Nadeau
+ <mailto:tnadeau@lucidvision.com>
+
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Editor: Andy Bierman
+ <mailto:andy@yumaworks.com>
+
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>";
+
+ description
+ "This module contains a collection of YANG definitions for the
+ configuration and identification of some common system
+ properties within a device containing a NETCONF server. This
+ includes data node definitions for system identification,
+ time-of-day management, user management, DNS resolver
+ configuration, and some protocol operations for system
+ management.
+
+ 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).
+
+ This version of this YANG module is part of RFC 7317; see
+ the RFC itself for full legal notices.";
+
+ revision 2014-08-06 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7317: A YANG Data Model for System Management";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef timezone-name {
+ type string;
+ description
+ "A time zone name as used by the Time Zone Database,
+ sometimes referred to as the 'Olson Database'.
+
+ The exact set of valid values is an implementation-specific
+ matter. Client discovery of the exact set of time zone names
+ for a particular server is out of scope.";
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database";
+ }
+
+ /*
+ * Features
+ */
+
+ feature radius {
+ description
+ "Indicates that the device can be configured as a RADIUS
+ client.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+ }
+
+ feature authentication {
+ description
+ "Indicates that the device supports configuration of
+ user authentication.";
+ }
+
+ feature local-users {
+ if-feature authentication;
+ description
+ "Indicates that the device supports configuration of
+ local user authentication.";
+ }
+
+ feature radius-authentication {
+ if-feature radius;
+ if-feature authentication;
+ description
+ "Indicates that the device supports configuration of user
+ authentication over RADIUS.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+ RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+ Authorization for Network Access Server (NAS)
+ Management";
+ }
+
+ feature ntp {
+ description
+ "Indicates that the device can be configured to use one or
+ more NTP servers to set the system date and time.";
+ }
+
+ feature ntp-udp-port {
+ if-feature ntp;
+ description
+ "Indicates that the device supports the configuration of
+ the UDP port for NTP servers.
+
+ This is a 'feature', since many implementations do not support
+ any port other than the default port.";
+ }
+
+ feature timezone-name {
+ description
+ "Indicates that the local time zone on the device
+ can be configured to use the TZ database
+ to set the time zone and manage daylight saving time.";
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database";
+ }
+
+ feature dns-udp-tcp-port {
+ description
+ "Indicates that the device supports the configuration of
+ the UDP and TCP port for DNS servers.
+
+ This is a 'feature', since many implementations do not support
+ any port other than the default port.";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity authentication-method {
+ description
+ "Base identity for user authentication methods.";
+ }
+
+ identity radius {
+ base authentication-method;
+ description
+ "Indicates user authentication using RADIUS.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+ RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+ Authorization for Network Access Server (NAS)
+ Management";
+ }
+
+ identity local-users {
+ base authentication-method;
+ description
+ "Indicates password-based authentication of locally
+ configured users.";
+ }
+
+ identity radius-authentication-type {
+ description
+ "Base identity for RADIUS authentication types.";
+ }
+
+ identity radius-pap {
+ base radius-authentication-type;
+ description
+ "The device requests Password Authentication Protocol (PAP)
+ authentication from the RADIUS server.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+ }
+
+ identity radius-chap {
+ base radius-authentication-type;
+ description
+ "The device requests Challenge Handshake Authentication
+ Protocol (CHAP) authentication from the RADIUS server.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+ }
+
+ /*
+ * Configuration data nodes
+ */
+
+ container system {
+ description
+ "System group configuration.";
+
+ leaf contact {
+ type string;
+ description
+ "The administrator contact information for the system.
+
+ A server implementation MAY map this leaf to the sysContact
+ MIB object. Such an implementation needs to use some
+ mechanism to handle the differences in size and characters
+ allowed between this leaf and sysContact. The definition of
+ such a mechanism is outside the scope of this document.";
+ reference
+ "RFC 3418: Management Information Base (MIB) for the
+ Simple Network Management Protocol (SNMP)
+ SNMPv2-MIB.sysContact";
+ }
+ leaf hostname {
+ type inet:domain-name;
+ description
+ "The name of the host. This name can be a single domain
+ label or the fully qualified domain name of the host.";
+ }
+ leaf location {
+ type string;
+ description
+ "The system location.
+
+ A server implementation MAY map this leaf to the sysLocation
+ MIB object. Such an implementation needs to use some
+ mechanism to handle the differences in size and characters
+ allowed between this leaf and sysLocation. The definition
+ of such a mechanism is outside the scope of this document.";
+ reference
+ "RFC 3418: Management Information Base (MIB) for the
+ Simple Network Management Protocol (SNMP)
+ SNMPv2-MIB.sysLocation";
+ }
+
+ container clock {
+ description
+ "Configuration of the system date and time properties.";
+
+ choice timezone {
+ description
+ "The system time zone information.";
+
+ case timezone-name {
+ if-feature timezone-name;
+ leaf timezone-name {
+ type timezone-name;
+ description
+ "The TZ database name to use for the system, such
+ as 'Europe/Stockholm'.";
+ }
+ }
+ case timezone-utc-offset {
+ leaf timezone-utc-offset {
+ type int16 {
+ range "-1500 .. 1500";
+ }
+ units "minutes";
+ description
+ "The number of minutes to add to UTC time to
+ identify the time zone for this system. For example,
+ 'UTC - 8:00 hours' would be represented as '-480'.
+ Note that automatic daylight saving time adjustment
+ is not provided if this object is used.";
+ }
+ }
+ }
+ }
+
+ container ntp {
+ if-feature ntp;
+ presence
+ "Enables the NTP client unless the 'enabled' leaf
+ (which defaults to 'true') is set to 'false'";
+ description
+ "Configuration of the NTP client.";
+
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Indicates that the system should attempt to
+ synchronize the system clock with an NTP server
+ from the 'ntp/server' list.";
+ }
+ list server {
+ key name;
+ description
+ "List of NTP servers to use for system clock
+ synchronization. If '/system/ntp/enabled'
+ is 'true', then the system will attempt to
+ contact and utilize the specified NTP servers.";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name for the NTP server.";
+ }
+ choice transport {
+ mandatory true;
+ description
+ "The transport-protocol-specific parameters for this
+ server.";
+
+ case udp {
+ container udp {
+ description
+ "Contains UDP-specific configuration parameters
+ for NTP.";
+ leaf address {
+ type inet:host;
+ mandatory true;
+ description
+ "The address of the NTP server.";
+ }
+ leaf port {
+ if-feature ntp-udp-port;
+ type inet:port-number;
+ default 123;
+ description
+ "The port number of the NTP server.";
+ }
+ }
+ }
+ }
+ leaf association-type {
+ type enumeration {
+ enum server {
+ description
+ "Use client association mode. This device
+ will not provide synchronization to the
+ configured NTP server.";
+ }
+ enum peer {
+ description
+ "Use symmetric active association mode.
+ This device may provide synchronization
+ to the configured NTP server.";
+ }
+ enum pool {
+ description
+ "Use client association mode with one or
+ more of the NTP servers found by DNS
+ resolution of the domain name given by
+ the 'address' leaf. This device will not
+ provide synchronization to the servers.";
+ }
+ }
+ default server;
+ description
+ "The desired association type for this NTP server.";
+ }
+ leaf iburst {
+ type boolean;
+ default false;
+ description
+ "Indicates whether this server should enable burst
+ synchronization or not.";
+ }
+ leaf prefer {
+ type boolean;
+ default false;
+ description
+ "Indicates whether this server should be preferred
+ or not.";
+ }
+ }
+ }
+
+ container dns-resolver {
+ description
+ "Configuration of the DNS resolver.";
+
+ leaf-list search {
+ type inet:domain-name;
+ ordered-by user;
+ description
+ "An ordered list of domains to search when resolving
+ a host name.";
+ }
+ list server {
+ key name;
+ ordered-by user;
+ description
+ "List of the DNS servers that the resolver should query.
+
+ When the resolver is invoked by a calling application, it
+ sends the query to the first name server in this list. If
+ no response has been received within 'timeout' seconds,
+ the resolver continues with the next server in the list.
+ If no response is received from any server, the resolver
+ continues with the first server again. When the resolver
+ has traversed the list 'attempts' times without receiving
+ any response, it gives up and returns an error to the
+ calling application.
+
+ Implementations MAY limit the number of entries in this
+ list.";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name for the DNS server.";
+ }
+ choice transport {
+ mandatory true;
+ description
+ "The transport-protocol-specific parameters for this
+ server.";
+
+ case udp-and-tcp {
+ container udp-and-tcp {
+ description
+ "Contains UDP- and TCP-specific configuration
+ parameters for DNS.";
+ reference
+ "RFC 1035: Domain Names - Implementation and
+ Specification
+ RFC 5966: DNS Transport over TCP - Implementation
+ Requirements";
+
+ leaf address {
+ type inet:ip-address;
+ mandatory true;
+ description
+ "The address of the DNS server.";
+ }
+ leaf port {
+ if-feature dns-udp-tcp-port;
+ type inet:port-number;
+ default 53;
+ description
+ "The UDP and TCP port number of the DNS server.";
+ }
+ }
+ }
+ }
+ }
+ container options {
+ description
+ "Resolver options. The set of available options has been
+ limited to those that are generally available across
+ different resolver implementations and generally useful.";
+ leaf timeout {
+ type uint8 {
+ range "1..max";
+ }
+ units "seconds";
+ default "5";
+ description
+ "The amount of time the resolver will wait for a
+ response from each remote name server before
+ retrying the query via a different name server.";
+ }
+ leaf attempts {
+ type uint8 {
+ range "1..max";
+ }
+ default "2";
+ description
+ "The number of times the resolver will send a query to
+ all of its name servers before giving up and returning
+ an error to the calling application.";
+ }
+ }
+ }
+
+ container radius {
+ if-feature radius;
+
+ description
+ "Configuration of the RADIUS client.";
+
+ list server {
+ key name;
+ ordered-by user;
+ description
+ "List of RADIUS servers used by the device.
+
+ When the RADIUS client is invoked by a calling
+ application, it sends the query to the first server in
+ this list. If no response has been received within
+ 'timeout' seconds, the client continues with the next
+ server in the list. If no response is received from any
+ server, the client continues with the first server again.
+ When the client has traversed the list 'attempts' times
+ without receiving any response, it gives up and returns an
+ error to the calling application.";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name for the RADIUS server.";
+ }
+ choice transport {
+ mandatory true;
+ description
+ "The transport-protocol-specific parameters for this
+ server.";
+
+ case udp {
+ container udp {
+ description
+ "Contains UDP-specific configuration parameters
+ for RADIUS.";
+ leaf address {
+ type inet:host;
+ mandatory true;
+ description
+ "The address of the RADIUS server.";
+ }
+
+ leaf authentication-port {
+ type inet:port-number;
+ default "1812";
+ description
+ "The port number of the RADIUS server.";
+ }
+ leaf shared-secret {
+ type string;
+ mandatory true;
+ nacm:default-deny-all;
+ description
+ "The shared secret, which is known to both the
+ RADIUS client and server.";
+ reference
+ "RFC 2865: Remote Authentication Dial In User
+ Service (RADIUS)";
+ }
+ }
+ }
+ }
+ leaf authentication-type {
+ type identityref {
+ base radius-authentication-type;
+ }
+ default radius-pap;
+ description
+ "The authentication type requested from the RADIUS
+ server.";
+ }
+ }
+ container options {
+ description
+ "RADIUS client options.";
+
+ leaf timeout {
+ type uint8 {
+ range "1..max";
+ }
+ units "seconds";
+ default "5";
+ description
+ "The number of seconds the device will wait for a
+ response from each RADIUS server before trying with a
+ different server.";
+ }
+
+ leaf attempts {
+ type uint8 {
+ range "1..max";
+ }
+ default "2";
+ description
+ "The number of times the device will send a query to
+ all of its RADIUS servers before giving up.";
+ }
+ }
+ }
+
+ container authentication {
+ nacm:default-deny-write;
+ if-feature authentication;
+
+ description
+ "The authentication configuration subtree.";
+
+ leaf-list user-authentication-order {
+ type identityref {
+ base authentication-method;
+ }
+ must '(. != "sys:radius" or ../../radius/server)' {
+ error-message
+ "When 'radius' is used, a RADIUS server"
+ + " must be configured.";
+ description
+ "When 'radius' is used as an authentication method,
+ a RADIUS server must be configured.";
+ }
+ ordered-by user;
+
+ description
+ "When the device authenticates a user with a password,
+ it tries the authentication methods in this leaf-list in
+ order. If authentication with one method fails, the next
+ method is used. If no method succeeds, the user is
+ denied access.
+
+ An empty user-authentication-order leaf-list still allows
+ authentication of users using mechanisms that do not
+ involve a password.
+
+ If the 'radius-authentication' feature is advertised by
+ the NETCONF server, the 'radius' identity can be added to
+ this list.
+
+ If the 'local-users' feature is advertised by the
+ NETCONF server, the 'local-users' identity can be
+ added to this list.";
+ }
+
+ list user {
+ if-feature local-users;
+ key name;
+ description
+ "The list of local users configured on this device.";
+
+ leaf name {
+ type string;
+ description
+ "The user name string identifying this entry.";
+ }
+ leaf password {
+ type ianach:crypt-hash;
+ description
+ "The password for this entry.";
+ }
+ list authorized-key {
+ key name;
+ description
+ "A list of public SSH keys for this user. These keys
+ are allowed for SSH authentication, as described in
+ RFC 4253.";
+ reference
+ "RFC 4253: The Secure Shell (SSH) Transport Layer
+ Protocol";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name for the SSH key.";
+ }
+
+ leaf algorithm {
+ type string;
+ mandatory true;
+ description
+ "The public key algorithm name for this SSH key.
+
+ Valid values are the values in the IANA 'Secure Shell
+ (SSH) Protocol Parameters' registry, Public Key
+ Algorithm Names.";
+ reference
+ "IANA 'Secure Shell (SSH) Protocol Parameters'
+ registry, Public Key Algorithm Names";
+ }
+ leaf key-data {
+ type binary;
+ mandatory true;
+ description
+ "The binary public key data for this SSH key, as
+ specified by RFC 4253, Section 6.6, i.e.:
+
+ string certificate or public key format
+ identifier
+ byte[n] key/certificate data.";
+ reference
+ "RFC 4253: The Secure Shell (SSH) Transport Layer
+ Protocol";
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * Operational state data nodes
+ */
+
+ container system-state {
+ config false;
+ description
+ "System group operational state.";
+
+ container platform {
+ description
+ "Contains vendor-specific information for
+ identifying the system platform and operating system.";
+ reference
+ "IEEE Std 1003.1-2008 - sys/utsname.h";
+
+ leaf os-name {
+ type string;
+ description
+ "The name of the operating system in use -
+ for example, 'Linux'.";
+ reference
+ "IEEE Std 1003.1-2008 - utsname.sysname";
+ }
+ leaf os-release {
+ type string;
+ description
+ "The current release level of the operating
+ system in use. This string MAY indicate
+ the OS source code revision.";
+ reference
+ "IEEE Std 1003.1-2008 - utsname.release";
+ }
+ leaf os-version {
+ type string;
+ description
+ "The current version level of the operating
+ system in use. This string MAY indicate
+ the specific OS build date and target variant
+ information.";
+ reference
+ "IEEE Std 1003.1-2008 - utsname.version";
+ }
+ leaf machine {
+ type string;
+ description
+ "A vendor-specific identifier string representing
+ the hardware in use.";
+ reference
+ "IEEE Std 1003.1-2008 - utsname.machine";
+ }
+ }
+
+ container clock {
+ description
+ "Monitoring of the system date and time properties.";
+
+ leaf current-datetime {
+ type yang:date-and-time;
+ description
+ "The current system date and time.";
+ }
+
+ leaf boot-datetime {
+ type yang:date-and-time;
+ description
+ "The system date and time when the system last restarted.";
+ }
+ }
+ }
+
+ rpc set-current-datetime {
+ nacm:default-deny-all;
+ description
+ "Set the /system-state/clock/current-datetime leaf
+ to the specified value.
+
+ If the system is using NTP (i.e., /system/ntp/enabled
+ is set to 'true'), then this operation will fail with
+ error-tag 'operation-failed' and error-app-tag value of
+ 'ntp-active'.";
+ input {
+ leaf current-datetime {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "The current system date and time.";
+ }
+ }
+ }
+
+ rpc system-restart {
+ nacm:default-deny-all;
+ description
+ "Request that the entire system be restarted immediately.
+ A server SHOULD send an rpc reply to the client before
+ restarting the system.";
+ }
+
+ rpc system-shutdown {
+ nacm:default-deny-all;
+ description
+ "Request that the entire system be shut down immediately.
+ A server SHOULD send an rpc reply to the client before
+ shutting down the system.";
+ }
+
+}
--- /dev/null
+module ietf-yang-library {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+ prefix yanglib;
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-datastores {
+ prefix ds;
+ reference
+ "RFC 8342: Network Management Datastore Architecture
+ (NMDA)";
+ }
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netconf/>
+ WG List: <mailto:netconf@ietf.org>
+ Author: Andy Bierman
+ <mailto:andy@yumaworks.com>
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+ Author: Kent Watsen
+ <mailto:kent+ietf@watsen.net>
+ Author: Robert Wilton
+ <mailto:rwilton@cisco.com>";
+ description
+ "This module provides information about the YANG modules,
+ datastores, and datastore schemas used by a network
+ management server.
+ 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 8525; see
+ the RFC itself for full legal notices.";
+
+ revision 2019-01-04 {
+ description
+ "Added support for multiple datastores according to the
+ Network Management Datastore Architecture (NMDA).";
+ reference
+ "RFC 8525: YANG Library";
+ }
+ revision 2016-04-09 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7895: YANG Module Library";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef revision-identifier {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}';
+ }
+ description
+ "Represents a specific date in YYYY-MM-DD format.";
+ }
+
+ /*
+ * Groupings
+ */
+ grouping module-identification-leafs {
+ description
+ "Parameters for identifying YANG modules and submodules.";
+ leaf name {
+ type yang:yang-identifier;
+ mandatory true;
+ description
+ "The YANG module or submodule name.";
+ }
+ leaf revision {
+ type revision-identifier;
+ description
+ "The YANG module or submodule revision date. If no revision
+ statement is present in the YANG module or submodule, this
+ leaf is not instantiated.";
+ }
+ }
+
+ grouping location-leaf-list {
+ description
+ "Common leaf-list parameter for the locations of modules and
+ submodules.";
+ leaf-list location {
+ type inet:uri;
+ description
+ "Contains a URL that represents the YANG schema
+ resource for this module or submodule.
+ This leaf will only be present if there is a URL
+ available for retrieval of the schema for this entry.";
+ }
+ }
+
+ grouping module-implementation-parameters {
+ description
+ "Parameters for describing the implementation of a module.";
+ leaf-list feature {
+ type yang:yang-identifier;
+ description
+ "List of all YANG feature names from this module that are
+ supported by the server, regardless whether they are defined
+ in the module or any included submodule.";
+ }
+ leaf-list deviation {
+ type leafref {
+ path "../../module/name";
+ }
+
+ description
+ "List of all YANG deviation modules used by this server to
+ modify the conformance of the module associated with this
+ entry. Note that the same module can be used for deviations
+ for multiple modules, so the same entry MAY appear within
+ multiple 'module' entries.
+ This reference MUST NOT (directly or indirectly)
+ refer to the module being deviated.
+ Robust clients may want to make sure that they handle a
+ situation where a module deviates itself (directly or
+ indirectly) gracefully.";
+ }
+ }
+
+ grouping module-set-parameters {
+ description
+ "A set of parameters that describe a module set.";
+ leaf name {
+ type string;
+ description
+ "An arbitrary name of the module set.";
+ }
+ list module {
+ key "name";
+ description
+ "An entry in this list represents a module implemented by the
+ server, as per Section 5.6.5 of RFC 7950, with a particular
+ set of supported features and deviations.";
+ reference
+ "RFC 7950: The YANG 1.1 Data Modeling Language";
+ uses module-identification-leafs;
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ description
+ "The XML namespace identifier for this module.";
+ }
+ uses location-leaf-list;
+ list submodule {
+ key "name";
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+ uses module-identification-leafs;
+ uses location-leaf-list;
+ }
+ uses module-implementation-parameters;
+ }
+ list import-only-module {
+ key "name revision";
+ description
+ "An entry in this list indicates that the server imports
+ reusable definitions from the specified revision of the
+ module but does not implement any protocol-accessible
+ objects from this revision.
+ Multiple entries for the same module name MAY exist. This
+ can occur if multiple modules import the same module but
+ specify different revision dates in the import statements.";
+ leaf name {
+ type yang:yang-identifier;
+ description
+ "The YANG module name.";
+ }
+ leaf revision {
+ type union {
+ type revision-identifier;
+ type string {
+ length "0";
+ }
+ }
+ description
+ "The YANG module revision date.
+ A zero-length string is used if no revision statement
+ is present in the YANG module.";
+ }
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ description
+ "The XML namespace identifier for this module.";
+ }
+ uses location-leaf-list;
+ list submodule {
+ key "name";
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+ uses module-identification-leafs;
+ uses location-leaf-list;
+ }
+ }
+ }
+
+ grouping yang-library-parameters {
+ description
+ "The YANG library data structure is represented as a grouping
+ so it can be reused in configuration or another monitoring
+ data structure.";
+ list module-set {
+ key "name";
+ description
+ "A set of modules that may be used by one or more schemas.
+ A module set does not have to be referentially complete,
+ i.e., it may define modules that contain import statements
+ for other modules not included in the module set.";
+ uses module-set-parameters;
+ }
+ list schema {
+ key "name";
+ description
+ "A datastore schema that may be used by one or more
+ datastores.
+ The schema must be valid and referentially complete, i.e.,
+ it must contain modules to satisfy all used import
+ statements for all modules specified in the schema.";
+ leaf name {
+ type string;
+ description
+ "An arbitrary name of the schema.";
+ }
+ leaf-list module-set {
+ type leafref {
+ path "../../module-set/name";
+ }
+ description
+ "A set of module-sets that are included in this schema.
+ If a non-import-only module appears in multiple module
+ sets, then the module revision and the associated features
+ and deviations must be identical.";
+ }
+ }
+ list datastore {
+ key "name";
+ description
+ "A datastore supported by this server.
+ Each datastore indicates which schema it supports.
+ The server MUST instantiate one entry in this list per
+ specific datastore it supports.
+ Each datastore entry with the same datastore schema SHOULD
+ reference the same schema.";
+ leaf name {
+ type ds:datastore-ref;
+ description
+ "The identity of the datastore.";
+ }
+ leaf schema {
+ type leafref {
+ path "../../schema/name";
+ }
+ mandatory true;
+ description
+ "A reference to the schema supported by this datastore.
+ All non-import-only modules of the schema are implemented
+ with their associated features and deviations.";
+ }
+ }
+ }
+
+ /*
+ * Top-level container
+ */
+
+ container yang-library {
+ config false;
+ description
+ "Container holding the entire YANG library of this server.";
+ uses yang-library-parameters;
+ leaf content-id {
+ type string;
+ mandatory true;
+ description
+ "A server-generated identifier of the contents of the
+ '/yang-library' tree. The server MUST change the value of
+ this leaf if the information represented by the
+ '/yang-library' tree, except '/yang-library/content-id', has
+ changed.";
+ }
+ }
+
+ /*
+ * Notifications
+ */
+
+ notification yang-library-update {
+ description
+ "Generated when any YANG library information on the
+ server has changed.";
+ leaf content-id {
+ type leafref {
+ path "/yanglib:yang-library/yanglib:content-id";
+ }
+ mandatory true;
+ description
+ "Contains the YANG library content identifier for the updated
+ YANG library at the time the notification is generated.";
+ }
+ }
+
+ /*
+ * Legacy groupings
+ */
+
+ grouping module-list {
+ status deprecated;
+ description
+ "The module data structure is represented as a grouping
+ so it can be reused in configuration or another monitoring
+ data structure.";
+
+ grouping common-leafs {
+ status deprecated;
+ description
+ "Common parameters for YANG modules and submodules.";
+ leaf name {
+ type yang:yang-identifier;
+ status deprecated;
+ description
+ "The YANG module or submodule name.";
+ }
+ leaf revision {
+ type union {
+ type revision-identifier;
+ type string {
+ length "0";
+ }
+ }
+ status deprecated;
+ description
+ "The YANG module or submodule revision date.
+ A zero-length string is used if no revision statement
+ is present in the YANG module or submodule.";
+ }
+ }
+
+ grouping schema-leaf {
+ status deprecated;
+ description
+ "Common schema leaf parameter for modules and submodules.";
+ leaf schema {
+ type inet:uri;
+ description
+ "Contains a URL that represents the YANG schema
+ resource for this module or submodule.
+ This leaf will only be present if there is a URL
+ available for retrieval of the schema for this entry.";
+ }
+ }
+ list module {
+ key "name revision";
+ status deprecated;
+ description
+ "Each entry represents one revision of one module
+ currently supported by the server.";
+ uses common-leafs {
+ status deprecated;
+ }
+ uses schema-leaf {
+ status deprecated;
+ }
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ status deprecated;
+ description
+ "The XML namespace identifier for this module.";
+ }
+ leaf-list feature {
+ type yang:yang-identifier;
+ status deprecated;
+ description
+ "List of YANG feature names from this module that are
+ supported by the server, regardless of whether they are
+ defined in the module or any included submodule.";
+ }
+ list deviation {
+ key "name revision";
+ status deprecated;
+
+ description
+ "List of YANG deviation module names and revisions
+ used by this server to modify the conformance of
+ the module associated with this entry. Note that
+ the same module can be used for deviations for
+ multiple modules, so the same entry MAY appear
+ within multiple 'module' entries.
+ The deviation module MUST be present in the 'module'
+ list, with the same name and revision values.
+ The 'conformance-type' value will be 'implement' for
+ the deviation module.";
+ uses common-leafs {
+ status deprecated;
+ }
+ }
+ leaf conformance-type {
+ type enumeration {
+ enum implement {
+ description
+ "Indicates that the server implements one or more
+ protocol-accessible objects defined in the YANG module
+ identified in this entry. This includes deviation
+ statements defined in the module.
+ For YANG version 1.1 modules, there is at most one
+ 'module' entry with conformance type 'implement' for a
+ particular module name, since YANG 1.1 requires that
+ at most one revision of a module is implemented.
+ For YANG version 1 modules, there SHOULD NOT be more
+ than one 'module' entry for a particular module
+ name.";
+ }
+ enum import {
+ description
+ "Indicates that the server imports reusable definitions
+ from the specified revision of the module but does
+ not implement any protocol-accessible objects from
+ this revision.
+ Multiple 'module' entries for the same module name MAY
+ exist. This can occur if multiple modules import the
+ same module but specify different revision dates in
+ the import statements.";
+ }
+ }
+ mandatory true;
+ status deprecated;
+ description
+ "Indicates the type of conformance the server is claiming
+ for the YANG module identified by this entry.";
+ }
+ list submodule {
+ key "name revision";
+ status deprecated;
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+ uses common-leafs {
+ status deprecated;
+ }
+ uses schema-leaf {
+ status deprecated;
+ }
+ }
+ }
+ }
+
+ /*
+ * Legacy operational state data nodes
+ */
+
+ container modules-state {
+ config false;
+ status deprecated;
+ description
+ "Contains YANG module monitoring information.";
+ leaf module-set-id {
+ type string;
+ mandatory true;
+ status deprecated;
+ description
+ "Contains a server-specific identifier representing
+ the current set of modules and submodules. The
+ server MUST change the value of this leaf if the
+ information represented by the 'module' list instances
+ has changed.";
+ }
+ uses module-list {
+ status deprecated;
+ }
+ }
+
+ /*
+ * Legacy notifications
+ */
+
+ notification yang-library-change {
+ status deprecated;
+ description
+ "Generated when the set of modules and submodules supported
+ by the server has changed.";
+ leaf module-set-id {
+ type leafref {
+ path "/yanglib:modules-state/yanglib:module-set-id";
+ }
+ mandatory true;
+ status deprecated;
+ description
+ "Contains the module-set-id value representing the
+ set of modules and submodules supported at the server
+ at the time the notification is generated.";
+ }
+ }
+}
--- /dev/null
+module ietf-yang-schema-mount {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount";
+ prefix yangmnt;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Editor: Ladislav Lhotka
+ <mailto:lhotka@nic.cz>";
+
+ description
+ "This module defines a YANG extension statement that can be used
+ to incorporate data models defined in other YANG modules in a
+ module. It also defines operational state data that specify the
+ overall structure of the data model.
+
+ 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 8528;
+ see the RFC itself for full legal notices.";
+
+ revision 2019-01-14 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8528: YANG Schema Mount";
+ }
+
+ /*
+ * Extensions
+ */
+
+ extension mount-point {
+ argument label;
+ description
+ "The argument 'label' is a YANG identifier, i.e., it is of the
+ type 'yang:yang-identifier'.
+
+ The 'mount-point' statement MUST NOT be used in a YANG
+ version 1 module, neither explicitly nor via a 'uses'
+ statement.
+
+ The 'mount-point' statement MAY be present as a substatement
+ of 'container' and 'list' and MUST NOT be present elsewhere.
+ There MUST NOT be more than one 'mount-point' statement in a
+ given 'container' or 'list' statement.
+
+ If a mount point is defined within a grouping, its label is
+ bound to the module where the grouping is used.
+
+ A mount point defines a place in the node hierarchy where
+ other data models may be attached. A server that implements a
+ module with a mount point populates the
+ '/schema-mounts/mount-point' list with detailed information on
+ which data models are mounted at each mount point.
+
+ Note that the 'mount-point' statement does not define a new
+ data node.";
+ }
+
+ /*
+ * State data nodes
+ */
+
+ container schema-mounts {
+ config false;
+ description
+ "Contains information about the structure of the overall
+ mounted data model implemented in the server.";
+ list namespace {
+ key "prefix";
+ description
+ "This list provides a mapping of namespace prefixes that are
+ used in XPath expressions of 'parent-reference' leafs to the
+ corresponding namespace URI references.";
+ leaf prefix {
+ type yang:yang-identifier;
+ description
+ "Namespace prefix.";
+ }
+ leaf uri {
+ type inet:uri;
+ description
+ "Namespace URI reference.";
+ }
+ }
+ list mount-point {
+ key "module label";
+ description
+ "Each entry of this list specifies a schema for a particular
+ mount point.
+
+ Each mount point MUST be defined using the 'mount-point'
+ extension in one of the modules listed in the server's
+ YANG library instance with conformance type 'implement'.";
+ leaf module {
+ type yang:yang-identifier;
+ description
+ "Name of a module containing the mount point.";
+ }
+ leaf label {
+ type yang:yang-identifier;
+ description
+ "Label of the mount point defined using the 'mount-point'
+ extension.";
+ }
+ leaf config {
+ type boolean;
+ default "true";
+ description
+ "If this leaf is set to 'false', then all data nodes in the
+ mounted schema are read-only ('config false'), regardless
+ of their 'config' property.";
+ }
+ choice schema-ref {
+ mandatory true;
+ description
+ "Alternatives for specifying the schema.";
+ container inline {
+ presence
+ "A complete self-contained schema is mounted at the
+ mount point.";
+ description
+ "This node indicates that the server has mounted at least
+ the module 'ietf-yang-library' at the mount point, and
+ its instantiation provides the information about the
+ mounted schema.
+
+ Different instances of the mount point may have
+ different schemas mounted.";
+ }
+ container shared-schema {
+ presence
+ "The mounted schema together with the 'parent-reference'
+ make up the schema for this mount point.";
+ description
+ "This node indicates that the server has mounted at least
+ the module 'ietf-yang-library' at the mount point, and
+ its instantiation provides the information about the
+ mounted schema. When XPath expressions in the mounted
+ schema are evaluated, the 'parent-reference' leaf-list
+ is taken into account.
+
+ Different instances of the mount point MUST have the
+ same schema mounted.";
+ leaf-list parent-reference {
+ type yang:xpath1.0;
+ description
+ "Entries of this leaf-list are XPath 1.0 expressions
+ that are evaluated in the following context:
+
+ - The context node is the node in the parent data tree
+ where the mount-point is defined.
+
+ - The accessible tree is the parent data tree
+ *without* any nodes defined in modules that are
+ mounted inside the parent schema.
+
+ - The context position and context size are both equal
+ to 1.
+
+ - The set of variable bindings is empty.
+
+ - The function library is the core function library
+ defined in the W3C XPath 1.0 document
+ (http://www.w3.org/TR/1999/REC-xpath-19991116) and
+ the functions defined in Section 10 of RFC 7950.
+
+ - The set of namespace declarations is defined by the
+ 'namespace' list under 'schema-mounts'.
+
+ Each XPath expression MUST evaluate to a node-set
+ (possibly empty). For the purposes of evaluating
+ XPath expressions whose context nodes are defined in
+ the mounted schema, the union of all these node-sets
+ together with ancestor nodes are added to the
+ accessible data tree.
+
+ Note that in the case 'ietf-yang-schema-mount' is
+ itself mounted, a 'parent-reference' in the mounted
+ module may refer to nodes that were brought into the
+ accessible tree through a 'parent-reference' in the
+ parent schema.";
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+module ietf-yang-types {
+
+namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+prefix "yang";
+
+organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+ WG Chair: David Kessens
+ <mailto:david.kessens@nsn.com>
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+ Editor: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>";
+
+description
+ "This module contains a collection of generally useful derived
+ YANG data types.
+ Copyright (c) 2013 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).
+ This version of this YANG module is part of RFC 6991; see
+ the RFC itself for full legal notices.";
+
+revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+}
+
+revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+}
+
+/*** collection of counter and gauge types ***/
+
+typedef counter32 {
+ type uint32;
+ description
+ "The counter32 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter32 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+ The counter32 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter32.
+ In the value set and its semantics, this type is equivalent
+ to the Counter32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+}
+
+typedef zero-based-counter32 {
+ type yang:counter32;
+ default "0";
+ description
+ "The zero-based-counter32 type represents a counter32
+ that has the defined 'initial' value zero.
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter32 textual convention of the SMIv2.";
+ reference
+ "RFC 4502: Remote Network Monitoring Management Information
+ Base Version 2";
+}
+
+typedef counter64 {
+ type uint64;
+ description
+ "The counter64 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter64 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+ The counter64 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter64.
+ In the value set and its semantics, this type is equivalent
+ to the Counter64 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+}
+
+typedef zero-based-counter64 {
+ type yang:counter64;
+ default "0";
+ description
+ "The zero-based-counter64 type represents a counter64 that
+ has the defined 'initial' value zero.
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter64 textual convention of the SMIv2.";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+}
+
+typedef gauge32 {
+ type uint32;
+ description
+ "The gauge32 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^32-1 (4294967295 decimal), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge32 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge32 also decreases (increases).
+ In the value set and its semantics, this type is equivalent
+ to the Gauge32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+}
+
+typedef gauge64 {
+ type uint64;
+ description
+ "The gauge64 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^64-1 (18446744073709551615), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge64 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge64 also decreases (increases).
+ In the value set and its semantics, this type is equivalent
+ to the CounterBasedGauge64 SMIv2 textual convention defined
+ in RFC 2856";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+}
+
+/*** collection of identifier-related types ***/
+
+typedef object-identifier {
+ type string {
+ pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+ + '(\.(0|([1-9]\d*)))*';
+ }
+ description
+ "The object-identifier type represents administratively
+ assigned names in a registration-hierarchical-name tree.
+ Values of this type are denoted as a sequence of numerical
+ non-negative sub-identifier values. Each sub-identifier
+ value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
+ are separated by single dots and without any intermediate
+ whitespace.
+ The ASN.1 standard restricts the value space of the first
+ sub-identifier to 0, 1, or 2. Furthermore, the value space
+ of the second sub-identifier is restricted to the range
+ 0 to 39 if the first sub-identifier is 0 or 1. Finally,
+ the ASN.1 standard requires that an object identifier
+ has always at least two sub-identifiers. The pattern
+ captures these restrictions.
+ Although the number of sub-identifiers is not limited,
+ module designers should realize that there may be
+ implementations that stick with the SMIv2 limit of 128
+ sub-identifiers.
+ This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+ since it is not restricted to 128 sub-identifiers. Hence,
+ this type SHOULD NOT be used to represent the SMIv2 OBJECT
+ IDENTIFIER type; the object-identifier-128 type SHOULD be
+ used instead.";
+ reference
+ "ISO9834-1: Information technology -- Open Systems
+ Interconnection -- Procedures for the operation of OSI
+ Registration Authorities: General procedures and top
+ arcs of the ASN.1 Object Identifier tree";
+}
+
+typedef object-identifier-128 {
+ type object-identifier {
+ pattern '\d*(\.\d*){1,127}';
+ }
+ description
+ "This type represents object-identifiers restricted to 128
+ sub-identifiers.
+ In the value set and its semantics, this type is equivalent
+ to the OBJECT IDENTIFIER type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+}
+
+typedef yang-identifier {
+ type string {
+ length "1..max";
+ pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+ pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+ }
+ description
+ "A YANG identifier string as defined by the 'identifier'
+ rule in Section 12 of RFC 6020. An identifier must
+ start with an alphabetic character or an underscore
+ followed by an arbitrary sequence of alphabetic or
+ numeric characters, underscores, hyphens, or dots.
+ A YANG identifier MUST NOT start with any possible
+ combination of the lowercase or uppercase character
+ sequence 'xml'.";
+ reference
+ "RFC 6020: YANG - A Data Modeling Language for the Network
+ Configuration Protocol (NETCONF)";
+}
+
+/*** collection of types related to date and time***/
+
+typedef date-and-time {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+ + '(Z|[\+\-]\d{2}:\d{2})';
+ }
+ description
+ "The date-and-time type is a profile of the ISO 8601
+ standard for representation of dates and times using the
+ Gregorian calendar. The profile is defined by the
+ date-time production in Section 5.6 of RFC 3339.
+ The date-and-time type is compatible with the dateTime XML
+ schema type with the following notable exceptions:
+ (a) The date-and-time type does not allow negative years.
+ (b) The date-and-time time-offset -00:00 indicates an unknown
+ time zone (see RFC 3339) while -00:00 and +00:00 and Z
+ all represent the same time zone in dateTime.
+ (c) The canonical format (see below) of data-and-time values
+ differs from the canonical format used by the dateTime XML
+ schema type, which requires all times to be in UTC using
+ the time-offset 'Z'.
+ This type is not equivalent to the DateAndTime textual
+ convention of the SMIv2 since RFC 3339 uses a different
+ separator between full-date and full-time and provides
+ higher resolution of time-secfrac.
+ The canonical format for date-and-time values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause date-and-time values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ date-and-time values with an unknown time zone (usually
+ referring to the notion of local time) uses the time-offset
+ -00:00.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ RFC 2579: Textual Conventions for SMIv2
+ XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+}
+
+typedef timeticks {
+ type uint32;
+ description
+ "The timeticks type represents a non-negative integer that
+ represents the time, modulo 2^32 (4294967296 decimal), in
+ hundredths of a second between two epochs. When a schema
+ node is defined that uses this type, the description of
+ the schema node identifies both of the reference epochs.
+ In the value set and its semantics, this type is equivalent
+ to the TimeTicks type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+}
+
+typedef timestamp {
+ type yang:timeticks;
+ description
+ "The timestamp type represents the value of an associated
+ timeticks schema node at which a specific occurrence
+ happened. The specific occurrence must be defined in the
+ description of any schema node defined using this type. When
+ the specific occurrence occurred prior to the last time the
+ associated timeticks attribute was zero, then the timestamp
+ value is zero. Note that this requires all timestamp values
+ to be reset to zero when the value of the associated timeticks
+ attribute reaches 497+ days and wraps around to zero.
+ The associated timeticks schema node must be specified
+ in the description of any schema node using this type.
+ In the value set and its semantics, this type is equivalent
+ to the TimeStamp textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+}
+
+/*** collection of generic address types ***/
+
+typedef phys-address {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+
+ description
+ "Represents media- or physical-level addresses represented
+ as a sequence octets, each octet represented by two hexadecimal
+ numbers. Octets are separated by colons. The canonical
+ representation uses lowercase characters.
+ In the value set and its semantics, this type is equivalent
+ to the PhysAddress textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+}
+
+typedef mac-address {
+ type string {
+ pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+ }
+ description
+ "The mac-address type represents an IEEE 802 MAC address.
+ The canonical representation uses lowercase characters.
+ In the value set and its semantics, this type is equivalent
+ to the MacAddress textual convention of the SMIv2.";
+ reference
+ "IEEE 802: IEEE Standard for Local and Metropolitan Area
+ Networks: Overview and Architecture
+ RFC 2579: Textual Conventions for SMIv2";
+}
+
+/*** collection of XML-specific types ***/
+
+typedef xpath1.0 {
+ type string;
+ description
+ "This type represents an XPATH 1.0 expression.
+ When a schema node is defined that uses this type, the
+ description of the schema node MUST specify the XPath
+ context in which the XPath expression is evaluated.";
+ reference
+ "XPATH: XML Path Language (XPath) Version 1.0";
+}
+
+/*** collection of string types ***/
+
+typedef hex-string {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+ description
+ "A hexadecimal string with octets represented as hex digits
+ separated by colons. The canonical representation uses
+ lowercase characters.";
+}
+
+typedef uuid {
+ type string {
+ pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+ + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+ }
+ description
+ "A Universally Unique IDentifier in the string representation
+ defined in RFC 4122. The canonical representation uses
+ lowercase characters.
+ The following is an example of a UUID in string representation:
+ f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+ ";
+ reference
+ "RFC 4122: A Universally Unique IDentifier (UUID) URN
+ Namespace";
+}
+
+typedef dotted-quad {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+ }
+ description
+ "An unsigned 32-bit number expressed in the dotted-quad
+ notation, i.e., four octets written as decimal numbers
+ and separated with the '.' (full stop) character.";
+}
+}
--- /dev/null
+module onap-system {
+ yang-version 1.1;
+ namespace "urn:onap:system";
+ prefix os;
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+ import ietf-system {
+ prefix sys;
+ }
+
+ organization
+ "ONAP - Open Network Automation Platform";
+ contact
+ "Web: <https://www.onap.org>
+ Editors:
+ Alex Stancu <mailto:alexandru.stancu@highstreet-technologies.com>
+ Adrian Lita <mailto:adrian.lita@highstreet-technologies.com>
+ Martin Skorupski <mailto:martin.skorupski@highstreet-technologies.com>";
+ description
+ "This module augments ietf-system with ONAP details.
+
+ Copyright 2020 the O-RAN Alliance.
+
+ Licensed under the Apache License, Version 2.0 (the 'License');
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an 'AS IS' BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.";
+
+ revision 2022-11-04 {
+ description
+ "Geographical location added to 'system'.";
+ reference
+ "Project specific";
+ }
+
+ revision 2020-10-26 {
+ description
+ "Initial revision for the ietf-system augmentation for ONAP.";
+ reference
+ "https://jira.onap.org/browse/SDNC-1396";
+ }
+
+ typedef geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ augment "/sys:system" {
+ description
+ "Enhancing the system information.";
+ leaf name {
+ type string;
+ description
+ "The name of the system.";
+ }
+ leaf web-ui {
+ type inet:uri;
+ description
+ "The URI of the system Web UI.";
+ }
+ container geographical-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.";
+ }
+ }
+ }
+}
--- /dev/null
+#!/usr/bin/python3
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import argparse
+from util.logging import get_pynts_logger, set_pynts_log_level
+import importlib
+from pathlib import Path
+
+from core.core import Core
+from util.threading import stop_event, sa_sleep
+
+logger = get_pynts_logger("pynts")
+
+EXTENSIONS = Path("./extensions")
+
+class Application():
+ def __init__(self) -> None:
+ # argument parsing
+ parser = argparse.ArgumentParser(description="PyNTS")
+ parser.add_argument(
+ '-v', '--verbose',
+ choices=['debug', 'info', 'warning', 'error', 'critical'],
+ help='Set the logging level',
+ default='debug'
+ )
+ args = parser.parse_args()
+
+ # setup logging
+ set_pynts_log_level(args.verbose.upper())
+
+ logger.info("bbbbbbb")
+ # get available extensions
+ self.loaded_extensions = [Core()]
+
+ if EXTENSIONS.exists():
+ for folder in EXTENSIONS.iterdir():
+ if folder.is_dir():
+ logger.info(f"loading {folder}")
+ main_file = folder / "main.py"
+ if main_file.exists():
+ absolute_path = main_file.resolve()
+
+ module_name = main_file.stem
+ spec = importlib.util.spec_from_file_location(module_name, absolute_path)
+ module = importlib.util.module_from_spec(spec)
+
+ spec.loader.exec_module(module)
+ cls = getattr(module, "Main")
+ self.loaded_extensions.append(cls())
+ logger.info(f"loaded {folder}")
+ else:
+ logger.error(f"failed to load {folder}")
+
+
+ # init
+ for extension in self.loaded_extensions:
+ extension.init()
+
+
+ # startup
+ for extension in self.loaded_extensions:
+ extension.startup()
+
+ # run
+ self.run()
+ logger.info("thread finished")
+
+ def run(self) -> None:
+ while not stop_event.is_set():
+ # logger.info(".")
+ sa_sleep(1)
+
+if __name__ == "__main__":
+ a = Application()
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from typing import Optional
+from util.logging import get_pynts_logger
+import os
+import sys
+
+from strenum import StrEnum
+from util.docker import get_hostname, get_ip_from_env
+
+logger = get_pynts_logger("config")
+
+"""
+Configuration class
+Singleton
+----
+Builds config from:
+- environment variables
+- JSON config
+- Netconf datastore
+"""
+class Config:
+ _instance = None
+
+ # environment variables
+ network_function_type: str = "undefined"
+
+ ssh_listen_endpoint: bool = True
+ tls_listen_endpoint: bool = False
+ ssh_callhome_endpoint: bool = False
+ tls_callhome_endpoint: bool = False
+
+ ssh_listen_port: int = 830 # default value, currently unmodifiable by env
+ tls_listen_port: int = 6513 # default value, currently unmodifiable by env
+
+ sftp_listen_port: int = 22 # default valuem currently unmodifiable by env
+
+ netconf_username: str = "netconf"
+ netconf_password: str = "netconf!"
+
+ sdnr_username: str = "admin"
+ sdnr_password: str = "admin"
+
+ sdnr_restconf_url: str
+
+ ves_url: str
+ ves_username: str
+ ves_password: str
+
+ # json variables
+
+ # netconf variables
+ hostname: str = get_hostname()
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance.reload()
+ return cls._instance
+
+ def reload(self) -> None:
+ logger.info("reloading config")
+
+ self.netconf_function_type: str = os.environ.get("NETWORK_FUNCTION_TYPE", "undefined")
+
+ self.ssh_listen_endpoint: bool = self.get_envvar_bool("SSH_LISTEN_ENDPOINT", "True")
+ self.tls_listen_endpoint: bool = self.get_envvar_bool("TLS_LISTEN_ENDPOINT", "False")
+ self.ssh_callhome_endpoint: bool = self.get_envvar_bool("SSH_CALLHOME_ENDPOINT", "False")
+ self.tls_callhome_endpoint: bool = self.get_envvar_bool("TLS_CALLHOME_ENDPOINT", "False")
+
+ endpoints = os.environ.get("ENDPOINT_COUNT", 1)
+ try:
+ self.endpoint_count: int = int(endpoints)
+ except ValueError:
+ logger.error(f"Got config ENDPOINT_COUNT=f{endpoints}, which is not integer. Defaulted to 1 endpoint count.")
+ self.endpoint_count = 1
+
+ self.netconf_username: str = os.environ.get("NETCONF_USERNAME", "netconf")
+ self.netconf_password: str = os.environ.get("NETCONF_PASSWORD", "netconf!")
+
+ self.sdnr_restconf_url: str = os.environ.get("SDNR_RESTCONF_URL", "")
+ self.sdnr_username: str = os.environ.get("SDNR_USERNAME", "admin")
+ self.sdnr_password: str = os.environ.get("SDNR_PASSWORD", "admin")
+
+ self.ves_url = os.environ.get("VES_URL", "")
+ self.ves_username = os.environ.get("VES_USERNAME", "sample1")
+ self.ves_password = os.environ.get("VES_PASSWORD", "sample1")
+
+ @staticmethod
+ def get_envvar_bool(varname: str, default_value: str) -> bool:
+ truthy_values = {'true', '1', 't', 'y', 'yes'}
+
+ value = os.environ.get(varname, default_value)
+
+ return value.lower() in truthy_values
+
+ def is_tls_enabled(self) -> bool:
+ return self.tls_listen_endpoint or self.tls_callhome_endpoint
+
+ # def only_one_connection_type(self) -> bool:
+ # only_one_listen_true = sum([self.ssh_listen_endpoint, self.tls_listen_endpoint]) == 2
+ # only_one_callhome_true = sum([self.ssh_callhome_endpoint, self.tls_callhome_endpoint]) == 2
+ # if only_one_listen_true or only_one_callhome_true:
+ # logger.error(f"Expecting only one type of connection (either SSH or TLS, but not both) at the same time! Got SSH_ENDPOINT={self.ssh_listen_endpoint}, TLS_ENDPOINT={self.tls_listen_endpoint}, SSH_CALLHOME={self.ssh_callhome_endpoint} and TLS_CALLHOME={self.tls_callhome_endpoint}. Please re-check the config!")
+ # sys.exit("Invalid configuration for the SSH and TLS endpoints.")
+
+ def to_dict(self) -> dict:
+ return {
+ "ssh_listen_endpoint": self.ssh_listen_endpoint,
+ "tls_listen_endpoint": self.tls_listen_endpoint,
+
+ "ssh_callhome_endpoint": self.ssh_callhome_endpoint,
+ "tls_callhome_endpoint": self.tls_callhome_endpoint,
+
+ "endpoint_count": self.endpoint_count,
+
+ "netconf_username": self.netconf_username,
+ "netconf_password": self.netconf_password,
+
+ "sdnr_restconf_url": self.sdnr_restconf_url,
+ "sdnr_username": self.sdnr_username,
+ "sdnr_password": self.sdnr_password
+ }
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+from pathlib import Path
+from libyang.util import LibyangError
+
+from core.extension import Extension
+from core.rest import Rest
+from core.netconf import Netconf, Datastore
+from core.config import Config
+from core.netconf_server import NetconfServer
+from core.ietf_hardware import IetfHardware
+
+from fault_management.fault_management import FaultManagement
+from performance_management.performance_management import PerformanceManagement
+
+from feature.ietf_keystore_truststore import IetfKeystoreTruststoreFeature
+from feature.ietf_system import IetfSystemFeature
+from feature.certificate_expiration_notifier import CertificateExpirationNotifierFeature
+from feature.netconf_acm import NetconfAcmFeature
+
+from feature.ves_heartbeat import VesHeartbeatFeature
+from feature.ves_pnfregistration import VesPnfRegistrationFeature
+
+logger = get_pynts_logger("core")
+
+class Core(Extension):
+ def init(self) -> None:
+ self.rest: Rest = Rest()
+ self.netconf: Netconf = Netconf() # initialize netconf sessions
+ self.config: Config = Config()
+ self.netconf_server: NetconfServer = NetconfServer()
+ self.ietf_hardware: IetfHardware = IetfHardware()
+ self.fault_management: FaultManagement = FaultManagement()
+ self.performance_management: PerformanceManagement = PerformanceManagement()
+
+ def startup(self) -> None:
+ # load IetfKeystoreTruststoreFeature
+ logger.info("loading IetfKeystoreTruststoreFeature")
+ self.ietf_keystore_truststore_feature: IetfKeystoreTruststoreFeature = IetfKeystoreTruststoreFeature()
+ self.ietf_keystore_truststore_feature.configure()
+
+ # load IetfSystemFeature
+ logger.info("loading IetfSystemFeature")
+ self.ietf_system_feature: IetfSystemFeature = IetfSystemFeature()
+ self.ietf_system_feature.configure()
+
+ # # load NetconfAcmFeature
+ # logger.info("loading NetconfAcmFeature")
+ # self.netconf_acm_feature: NetconfAcmFeature = NetconfAcmFeature()
+ # self.netconf_acm_feature.configure(enabled=True)
+
+ # load CertificateExpirationNotifierFeature
+ logger.info("loading CertificateExpirationNotifierFeature")
+ self.certificate_expiration_notifier_feature: CertificateExpirationNotifierFeature = CertificateExpirationNotifierFeature()
+ self.certificate_expiration_notifier_feature.start()
+
+
+ # populate all data
+ logger.info("attempting to populate netconf data")
+ if Path("/data").exists():
+ ds_files = self.netconf.get_datastore_files("/data", "json|xml")
+ for ds_file in ds_files:
+ try:
+ self.netconf.set_data_from_path(Datastore(ds_file['datastore']), ds_file['module_name'], ds_file['extension'], ds_file['filename'])
+ except LibyangError as e:
+ logger.error(f"Could not load {ds_file['extension']} data in {ds_file['datastore']} for module {ds_file['module_name']} from {ds_file['filename']}")
+ logger.error(f"Exception: {e}")
+
+ self.ietf_hardware.check_ietf_hardware()
+
+ with self.netconf.connection.start_session("startup") as sess_start:
+ logger.debug(f"Copying contents of running datastore into startup...")
+ sess_start.copy_config("running")
+ sess_start.apply_changes()
+ logger.debug(f"Finished copying contents of running datastore into startup!")
+ # ves pnfRegistration
+ # self.ves_pnfregistration = VesPnfRegistrationFeature()
+ # self.ves_pnfregistration.start()
+
+ # # ves heartbeat
+ # self.ves_heartbeat = VesHeartbeatFeature()
+ # self.ves_heartbeat.start()
+
+ # # fault management
+ # self.fault_management.load_active_alarms()
+ # self.fault_management.start()
+
+ # # performance management
+ self.performance_management.start()
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+class DictFactory:
+ """Factory for creating dictionary templates based on a type."""
+ templates = {}
+
+ def __init__(self) -> None:
+ raise Exception("DictFactory should not be instantiated")
+
+ @staticmethod
+ def add_template(template_type: str, template_class) -> None:
+ existing_template_class = DictFactory.templates.get(template_type)
+ if existing_template_class:
+ return
+
+ DictFactory.templates[template_type] = template_class
+
+ @staticmethod
+ def get_template(template_type: str):
+ """Returns an instance of a template based on the template type."""
+
+ template_class = DictFactory.templates.get(template_type)
+ if not template_class:
+ raise ValueError("Unknown template type")
+ return template_class()
+
+
+class BaseTemplate:
+ """Base class for dictionary templates, providing shared functionality."""
+
+ def __init__(self):
+ self.data = self.create_dict()
+
+ def create_dict(self):
+ """Subclasses must implement this method to define their dictionary template."""
+ raise NotImplementedError("Subclasses must implement create_dict method.")
+
+ def update_key(self, path, value, append_to_list=False):
+ """
+ Updates or appends the value of a key in the dictionary, supporting paths through nested dictionaries and lists.
+ If the final key points to a list and append_to_list is True, the value is appended to the list instead of replacing it.
+ The path to the key is provided as a list of keys/indexes.
+ """
+ current_level = self.data
+ for i, key in enumerate(path[:-1]): # Navigate through all but the last key/index
+ if isinstance(current_level, list):
+ # Ensure the key is an integer index for lists
+ if not isinstance(key, int):
+ raise KeyError(f"Expected an integer index for list, got {type(key).__name__} at path segment {key}")
+ if key >= len(current_level):
+ raise IndexError(f"Index {key} out of range for list at path segment {path[:i+1]}")
+ elif not isinstance(current_level, dict) or key not in current_level:
+ raise KeyError(f"Key '{key}' not found at path segment {path[:i+1]}")
+ current_level = current_level[key]
+
+ # For the last key/index in the path, check if it's meant to append to a list
+ if append_to_list and isinstance(current_level, list):
+ current_level.append(value)
+ elif append_to_list and path[-1] in current_level and isinstance(current_level[path[-1]], list):
+ current_level[path[-1]].append(value)
+ else:
+ current_level[path[-1]] = value
+
+ def delete_key(self, path):
+ """
+ Removes a key from the dictionary, supporting paths through nested dictionaries and lists.
+ If the final key points to a list, the corresponding item is removed from the list.
+ The path to the key is provided as a list of keys/indexes.
+ """
+ current_level = self.data
+ for i, key in enumerate(path[:-1]):
+ if isinstance(current_level, list):
+ if not isinstance(key, int) or key >= len(current_level):
+ raise IndexError(f"Index {key} out of range or invalid for list at path segment {path[:i+1]}")
+ elif not isinstance(current_level, dict) or key not in current_level:
+ raise KeyError(f"Key '{key}' not found at path segment {path[:i+1]}")
+ current_level = current_level[key]
+
+ # For the last key/index in the path, remove the key/item
+ if isinstance(current_level, list) and isinstance(path[-1], int):
+ if path[-1] >= len(current_level):
+ raise IndexError(f"Index {path[-1]} out of range for list at final path segment")
+ current_level.pop(path[-1])
+ elif isinstance(current_level, dict):
+ if path[-1] in current_level:
+ del current_level[path[-1]]
+ else:
+ raise KeyError(f"Key '{path[-1]}' not found for deletion.")
+ else:
+ raise TypeError("Cannot delete from a non-dictionary/non-list object.")
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from abc import ABC, abstractmethod
+
+class Extension(ABC):
+ @abstractmethod
+ def init(self) -> None:
+ pass
+
+ @abstractmethod
+ def startup(self) -> None:
+ pass
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import uuid
+from util.logging import get_pynts_logger
+
+from core.config import Config
+from core.netconf import Netconf, Datastore
+
+from libyang.keyed_list import KeyedList
+
+
+logger = get_pynts_logger("ietf-hardware")
+
+"""
+IetfHardware
+Singleton
+----
+configures ietf-hardware
+"""
+class IetfHardware:
+ _instance = None
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ logger.debug("Created IetfHardware object")
+
+ cls._instance.set_config()
+
+ return cls._instance
+
+ def set_config(self) -> None:
+ self.netconf: Netconf = Netconf()
+ self.config: Config = Config()
+ self.namespace = uuid.NAMESPACE_URL
+
+ def check_ietf_hardware(self):
+ hardware = self.netconf.running.get_data("/ietf-hardware:hardware")
+ # logger.debug(f"Found hardware: {hardware}")
+
+ components = hardware
+ try:
+ for key in ['hardware', 'component']:
+ components = components[key]
+
+ if isinstance(components, list):
+ for component in components:
+ # Update alias and asset-id
+ component['alias'] = f"{self.config.hostname}-{component['name']}"
+ component['asset-id'] = uuid.uuid5(self.namespace, component['alias'])
+
+ # Check if 'uri' is presents
+ if 'uri' in component:
+ uris = component['uri']
+
+ new_uri = f"https://{self.config.hostname}.dcn/restconf/data/ietf-hardware:hardware/component/{component['name']}"
+ if new_uri not in uris._map:
+ uris.append(new_uri)
+ else:
+ component['uri'] = KeyedList()
+
+ new_uri = f"https://{self.config.hostname}.dcn/restconf/data/ietf-hardware:hardware/component/{component['name']}"
+ component['uri'].append(new_uri)
+
+ # logger.debug(f"Transforming {component['name']} with alias {component['alias']} and asset-id {component['asset-id']}")
+ except KeyError as e:
+ logger.error(f"Keys not found in JSON object {hardware}. Error: {e}")
+ except TypeError as e:
+ logger.error(f"List not at the expected level in {hardware}. Error: {e}")
+
+ # logger.debug(f"New hardware is: {hardware}")
+ self.netconf.running.edit_batch(hardware, "ietf-hardware")
+ self.netconf.running.apply_changes()
+ with self.netconf.connection.start_session("operational") as sess:
+ sess.edit_batch(hardware, "ietf-hardware")
+ sess.apply_changes()
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger, get_pynts_log_level
+import logging
+from strenum import StrEnum
+import sysrepo
+from sysrepo.session import SysrepoSession
+import json
+import os
+import re
+
+logger = get_pynts_logger("netconf")
+
+class Datastore(StrEnum):
+ RUNNING = "running"
+ OPERATIONAL = "operational"
+
+class Netconf:
+ _instance = None
+
+ connection:sysrepo.SysrepoConnection
+ running: SysrepoSession
+ operational: SysrepoSession
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ sysrepo.configure_logging(
+ stderr_level=logging.INFO,
+ # stderr_level=get_pynts_log_level(),
+ # syslog_level=get_pynts_log_level(),
+ # syslog_app_name="sysrepo",
+ py_logging=True,
+ )
+ cls._instance.connect()
+
+ return cls._instance
+
+ def connect(self) -> None:
+ logger.info("connecting to sysrepo")
+ self.connection = sysrepo.SysrepoConnection()
+ self.running = self.connection.start_session(datastore="running")
+ self.operational = self.connection.start_session(datastore="operational")
+ logger.info("connected to sysrepo")
+
+ def disconnect(self) -> None:
+ self.connection.disconnect()
+ logger.info("disconnected from sysrepo")
+
+ def set_data(self, datastore: Datastore, xpath: str | None, data: dict | str, default_operation: str = "merge") -> None:
+ if xpath is None or xpath == "":
+ logger.info("setting multiple modules at once")
+ for module in data:
+ self.set_data(datastore, module, data[module], f"!{default_operation}")
+ else:
+ if xpath.endswith("/"):
+ xpath = xpath[:-1]
+
+ logger.info(f"setting {datastore}:'{xpath}'")
+ logger.debug(f"to '{data}'")
+
+ if type(data) is str:
+ if datastore == Datastore.RUNNING:
+ self.running.set_item(xpath, data)
+ elif datastore == Datastore.OPERATIONAL:
+ self.operational.set_item(xpath, data)
+ else:
+ raise Exception(f"invalid datastore {datastore}")
+
+ elif type(data) is dict:
+ oper = default_operation
+ if oper.startswith("!"):
+ oper = oper[1:]
+
+ if xpath.startswith("/"):
+ xpath = xpath[1:]
+
+ if datastore == Datastore.RUNNING:
+ self.running.edit_batch(data, xpath, default_operation=oper)
+ elif datastore == Datastore.OPERATIONAL:
+ self.operational.edit_batch(data, xpath, default_operation=oper)
+ else:
+ raise Exception(f"invalid datastore {datastore}")
+
+ if not default_operation.startswith("!"):
+ logger.info(f"applying datastore {datastore} changes")
+ if datastore == Datastore.RUNNING:
+ self.running.apply_changes()
+ elif datastore == Datastore.OPERATIONAL:
+ self.operational.apply_changes()
+ else:
+ raise Exception(f"invalid datastore {datastore}")
+
+ def get_data(self, datastore: Datastore, xpath: str) -> dict:
+ if datastore == Datastore.RUNNING:
+ return self.running.get_data(xpath)
+ elif datastore == Datastore.OPERATIONAL:
+ return self.operational.get_data(xpath)
+ else:
+ raise Exception(f"invalid datastore {datastore}")
+
+
+ def set_data_from_path(self, datastore: Datastore, module_name: str, format: str, file_path: str) -> None:
+ logger.debug(f"Loading {format} data for {module_name} in datastore {datastore} from file {file_path}")
+ with open(file_path, 'r') as file:
+
+ if datastore == Datastore.OPERATIONAL:
+ with self.connection.start_session("operational") as sess:
+ with self.connection.get_ly_ctx() as ctx:
+ data = ctx.parse_data_file(file, format, parse_only=True)
+ sess.edit_batch_ly(data)
+ sess.apply_changes()
+ elif datastore == Datastore.RUNNING:
+ with self.connection.start_session("running") as sess:
+ try:
+ data = sess.get_data(f"/{module_name}:*")
+ except sysrepo.SysrepoNotFoundError:
+ logger.debug(f"Did not find data for /{module_name}:*")
+ data = None
+ if not data:
+ with self.connection.get_ly_ctx() as ctx:
+ data = ctx.parse_data_file(file, format, parse_only=True)
+ # start with a fresh datastore, erase anything that was before
+ # sess.copy_config("startup", module_name)
+ sess.edit_batch_ly(data)
+ sess.apply_changes()
+ else:
+ logger.debug(f"Skipping loading data from file {file_path} into module {module_name}. Data already present...")
+
+ @staticmethod
+ def get_datastore_files(directory: str, filter=None) -> list:
+ extensions = ['json', 'xml']
+ if filter is not None:
+ extensions = filter.split("|")
+
+ extensions_pattern = '|'.join(extensions)
+ pattern_string = r'^(.+)-(running|operational)\.(' + extensions_pattern + ')$'
+ pattern = re.compile(pattern_string)
+
+ # Dictionary to store results
+ results = []
+
+ # Iterate over files in the specified directory
+ for filename in os.listdir(directory):
+ # Check if the filename matches the expected pattern
+ match = pattern.match(filename)
+ if match:
+ # Extract parts of the filename
+ module_name, datastore, extension = match.groups()
+ # Append the results
+ results.append({
+ 'filename': f"{directory}/{filename}",
+ 'module_name': module_name,
+ 'datastore': datastore,
+ 'extension': extension
+ })
+
+ def is_top_condition(entry) -> bool:
+ return entry['module_name'] == "ietf-yang-schema-mount"
+
+ top_entries = [entry for entry in results if is_top_condition(entry)]
+ other_entries = [entry for entry in results if not is_top_condition(entry)]
+
+ ordered_results = top_entries + other_entries
+
+ return ordered_results
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import requests
+
+from core.config import Config
+from core.netconf import Netconf, Datastore
+from core.dict_factory import BaseTemplate, DictFactory
+from util.crypto import CryptoUtils
+
+logger = get_pynts_logger("netconf-server")
+
+ODL_CALLHOME_ALLOW_DEVICES_URL="/rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices/device="
+ODL_ADD_TRUSTED_KEY_URL="/rests/operations/netconf-keystore:add-trusted-certificate"
+HTTP_YANG_JSON_HEADERS = {
+ 'content-type': 'application/yang-data+json',
+ 'accept': 'application/yang-data+json'
+ }
+HTTP_JSON_HEADERS = {
+ 'content-type': 'application/json',
+ 'accept': 'application/json'
+ }
+
+"""
+NetconfServer
+Singleton
+----
+configures netconf server
+"""
+class NetconfServer:
+ _instance = None
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ logger.debug("Created NetconfServer object")
+
+ DictFactory.add_template("ssh-server-parameters", SshServerParametersTemplate)
+ DictFactory.add_template("ssh-endpoint", SshEndpointTemplate)
+ DictFactory.add_template("tls-server-parameters", TlsServerParametersTemplate)
+ DictFactory.add_template("netconf-server-parameters", NetconfServerParametersTemplate)
+ DictFactory.add_template("tls-endpoint", TlsEndpointTemplate)
+ DictFactory.add_template("call-home-ssh-endpoint", CallhomeSshEndpointTemplate)
+ DictFactory.add_template("call-home-tls-endpoint", CallhomeTlsEndpointTemplate)
+ DictFactory.add_template("ietf-netconf-server", IetfNetconfServerTemplate)
+
+ cls._instance.set_config()
+
+ return cls._instance
+
+ def set_config(self) -> None:
+ self.netconf: Netconf = Netconf()
+ self.netconf.running.copy_config("startup", "ietf-netconf-server") # reset the ietf-netconf-server module
+ self.config: Config = Config()
+
+ self.crypto: CryptoUtils = CryptoUtils()
+
+ # for instance in range(1, self.config.endpoint_count):
+ # if self.config.ssh_listen_endpoint:
+ # self.ssh_endpoint_config(self.config.ssh_listen_port + instance)
+ # elif self.config.tls_listen_endpoint:
+ # self.tls_endpoint_config(self.config.tls_listen_port + instance)
+ # try:
+ # self.send_odl_callhome_allow_ssh()
+ # except Exception as e:
+ # logger.error(f"Could not send ODL CallHome allow SSH. Exception: {e}")
+ # #self.ssh_callhome_endpoint_config()
+ # try:
+ # self.send_odl_callhome_allow_tls()
+ # except Exception as e:
+ # logger.error(f"Could not send ODL CallHome allow TLS. Exception: {e}")
+ #self.tls_callhome_endpoint_config()
+
+
+ def ssh_endpoint_config(self, port: int) -> None:
+ ietf_netconf_server_template = DictFactory.get_template("ietf-netconf-server")
+ ietf_netconf_server_template.delete_key(["ietf-netconf-server:netconf-server", "call-home"])
+
+ ssh_endpoint_template = DictFactory.get_template("ssh-endpoint")
+ ssh_endpoint_template.update_key(["name"], f"ssh-endpoint-{port}")
+ ssh_endpoint_template.update_key(["ssh", "ssh-server-parameters"], DictFactory.get_template("ssh-server-parameters").data)
+ ssh_endpoint_template.update_key(["ssh", "tcp-server-parameters", "local-port"], port)
+
+ ietf_netconf_server_template.update_key(["ietf-netconf-server:netconf-server", "listen", "endpoints", "endpoint"], ssh_endpoint_template.data, append_to_list=True)
+ self.netconf.set_data(Datastore.RUNNING, "ietf-netconf-server", ietf_netconf_server_template.data, "merge")
+
+ return ssh_endpoint_template.data
+
+ def tls_endpoint_config(self, port: int) -> None:
+ ietf_netconf_server_template = DictFactory.get_template("ietf-netconf-server")
+ ietf_netconf_server_template.delete_key(["ietf-netconf-server:netconf-server", "call-home"])
+
+ tls_endpoint_template = DictFactory.get_template("tls-endpoint")
+
+ tls_endpoint_template.update_key(["name"], f"tls-endpoint-{port}")
+ tls_endpoint_template.update_key(["tls", "tls-server-parameters"], DictFactory.get_template("tls-server-parameters").data)
+ tls_endpoint_template.update_key(["tls", "netconf-server-parameters"], self.get_netconf_server_parameters_updated_keys(self.crypto))
+ tls_endpoint_template.update_key(["tls", "tcp-server-parameters", "local-port"], port)
+
+ ietf_netconf_server_template.update_key(["ietf-netconf-server:netconf-server", "listen", "endpoints", "endpoint"], tls_endpoint_template.data, append_to_list=True)
+ self.netconf.set_data(Datastore.RUNNING, "ietf-netconf-server", ietf_netconf_server_template.data, "merge")
+
+ @staticmethod
+ def get_netconf_server_parameters_updated_keys(crypto: CryptoUtils) -> dict:
+ netconf_server_parameters_template = DictFactory.get_template("netconf-server-parameters")
+
+ netconf_server_parameters_template.update_key(["client-identity-mappings", "cert-to-name", 0, "fingerprint"], crypto.get_certificate_fingerprint(crypto.ca_cert))
+
+ return netconf_server_parameters_template.data
+
+ # def ssh_callhome_endpoint_config(self) -> None:
+ # ietf_netconf_server_template = DictFactory.get_template("ietf-netconf-server")
+ # ietf_netconf_server_template.delete_key(["ietf-netconf-server:netconf-server", "listen"])
+
+ # callhome_template = DictFactory.get_template("call-home-ssh-endpoint")
+
+ # # callhome_template.update_key(["ssh", "ssh-server-parameters"], self.get_ssh_server_parameters_updated_keys(self.crypto))
+ # callhome_template.update_key(["ssh", "ssh-server-parameters"], DictFactory.get_template("ssh-server-parameters").data)
+ # callhome_template.update_key(["ssh", "tcp-client-parameters", "remote-address"], self.config.sdnr_callhome_ip)
+ # callhome_template.update_key(["ssh", "tcp-client-parameters", "remote-port"], self.config.sdnr_callhome_ssh_port)
+
+ # ietf_netconf_server_template.update_key(["ietf-netconf-server:netconf-server", "call-home", "netconf-client", 0, "endpoints", "endpoint"], callhome_template.data, append_to_list=True)
+ # self.netconf.set_data(Datastore.RUNNING, "ietf-netconf-server", ietf_netconf_server_template.data, "merge")
+
+ # def tls_callhome_endpoint_config(self) -> None:
+ # ietf_netconf_server_template = DictFactory.get_template("ietf-netconf-server")
+ # ietf_netconf_server_template.delete_key(["ietf-netconf-server:netconf-server", "listen"])
+
+ # callhome_template = DictFactory.get_template("call-home-tls-endpoint")
+
+ # callhome_template.update_key(["tls", "tls-server-parameters"], DictFactory.get_template("tls-server-parameters").data)
+ # callhome_template.update_key(["tls", "netconf-server-parameters"], self.get_netconf_server_parameters_updated_keys(self.crypto))
+
+ # callhome_template.update_key(["tls", "tcp-client-parameters", "remote-address"], self.config.sdnr_callhome_ip)
+ # callhome_template.update_key(["tls", "tcp-client-parameters", "remote-port"], self.config.sdnr_callhome_tls_port)
+
+ # ietf_netconf_server_template.update_key(["ietf-netconf-server:netconf-server", "call-home", "netconf-client", 0, "endpoints", "endpoint"], callhome_template.data, append_to_list=True)
+ # self.netconf.set_data(Datastore.RUNNING, "ietf-netconf-server", ietf_netconf_server_template.data, "merge")
+
+ def send_odl_callhome_allow_ssh(self) -> None:
+ allow_ssh_template = DictFactory.get_template("odl-netconf-callhome-server-ssh")
+
+ allow_ssh_template.update_key(["odl-netconf-callhome-server:device", "unique-id"], self.config.hostname)
+ allow_ssh_template.update_key(["odl-netconf-callhome-server:device", "ssh-client-params", "credentials", "username"], self.config.netconf_username)
+ allow_ssh_template.update_key(["odl-netconf-callhome-server:device", "ssh-client-params", "credentials", "passwords"], self.config.netconf_password, append_to_list=True)
+ allow_ssh_template.update_key(["odl-netconf-callhome-server:device", "ssh-client-params", "host-key"], self.crypto.get_public_key_ssh_format())
+
+ url = self.config.sdnr_restconf_url + ODL_CALLHOME_ALLOW_DEVICES_URL + self.config.hostname
+
+ logger.debug(f"sending HTTP PUT to {url} with payload {allow_ssh_template.data}")
+ response = requests.put(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=allow_ssh_template.data, headers=HTTP_YANG_JSON_HEADERS)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ else:
+ logger.error(f"HTTP PUT request failed to {url} with payload {allow_ssh_template.data} with status_code={response.status_code}")
+
+ def send_odl_callhome_allow_tls(self) -> None:
+ odl_trusted_cert_template = DictFactory.get_template("odl-netconf-callhome-trusted-cert")
+
+ odl_trusted_cert_template.update_key(["input", "trusted-certificate", 0, "name"], self.config.hostname)
+ odl_trusted_cert_template.update_key(["input", "trusted-certificate", 0, "certificate"], self.crypto.get_certificate_base64_encoding_no_markers())
+
+ url = self.config.sdnr_restconf_url + ODL_ADD_TRUSTED_KEY_URL
+ logger.debug(f"sending HTTP POST to {url} with payload {odl_trusted_cert_template.data}")
+ response = requests.post(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=odl_trusted_cert_template.data, headers=HTTP_JSON_HEADERS)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ else:
+ logger.error(f"HTTP POST request failed to {url} with payload {odl_trusted_cert_template.data} with status_code={response.status_code}")
+
+ allow_tls_template = DictFactory.get_template("odl-netconf-callhome-server-tls")
+
+ allow_tls_template.update_key(["odl-netconf-callhome-server:device", "unique-id"], self.config.hostname)
+ allow_tls_template.update_key(["odl-netconf-callhome-server:device", "tls-client-params", "certificate-id"], self.config.hostname)
+
+ url = self.config.sdnr_restconf_url + ODL_CALLHOME_ALLOW_DEVICES_URL + self.config.hostname
+ logger.debug(f"sending HTTP PUT to {url} with payload {allow_tls_template.data}")
+ response = requests.put(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=allow_tls_template.data, headers=HTTP_YANG_JSON_HEADERS)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ else:
+ logger.error(f"HTTP PUT request failed to {url} with payload {allow_tls_template.data} with status_code={response.status_code}")
+
+class SshServerParametersTemplate(BaseTemplate):
+ """A dictionary template for ssh-server-parameters objects."""
+ def create_dict(self):
+ config = Config()
+ return {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": config.netconf_username,
+ "password": "$0$" + config.netconf_password,
+ # "public-keys": {
+ # "inline-definition": {
+ # "public-key": [{
+ # "name": "test",
+ # "public-key-format": "ietf-crypto-types:ssh-public-key-format",
+ # "public-key": "AAAAB3NzaC1yc2EAAAADAQABAAACAQCegtvGWzi2fA5Y/9W1lT2l+JlPtPxDJX/fNVrssJBAGErdpSquEV85qDRCmY5qWbQ8cHv9DgJ3/4OI8XmWZkwGM+N9zXnYlc5VQqCTM1wwridroJPjkIA6RRtW+SO06VyOtdN1pikCKvpPKt4LL59mQUREsf5+9w1zg5cc2bBsCFzXAiYtBpXO3d6ZyDKHPcND92ns+fpQ4EV3GydVJYH6Sqv/Aix0BcVB6nK4gfl57yyWJR808ExGXR/ZoI+ZecaBYyuOAj2mv5Yf6U+roKEYj4JVVDh/+Az3lQpl99WxXi4ykLNf3UAZX9fLOqfiUzCWT8ow3zRYv9iwKCYy8c4nRDDpASjtCJqS/RfoCx2LAG+nynBT+qa2yCUT5dDI55GK/bOhoGtd5gMuC9grVD3/xe2/lgS2oAxci2bx4UIhvrUP8SrgNEc8+99NRvygdrvaRUNJ49OqMI1LgVhK2Aqq6hc6KyRYeal9K98AVJPXBocfnDsDw4d/uKBWI3fMJAf7qoIzhew03MxtetK1J4GhmD/TN2PrwSrFeO9iBUuaTcb6n/X9Gj0zQsLTZBNZMs+FBjQTr3fjA5WItAzoA+ZpAQtICg6y2KwUZwX3xaAHv4lHiO5nygAN453W9ksX8DBBppUWh6Lt3/TY/lYUV2rXMPhCwWMHpMzuP+q179iPaQ=="
+ # }]
+ # }
+ }
+ ]
+ }
+ }
+ }
+
+
+class SshEndpointTemplate(BaseTemplate):
+ """A dictionary template for ssh-endpoint objects."""
+ def create_dict(self):
+ return {
+ "name": "ssh-password-auth-endpt",
+ "ssh": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 830
+ },
+ "ssh-server-parameters": {}
+ }
+ }
+
+
+class TlsServerParametersTemplate(BaseTemplate):
+ """A dictionary template for tls-server-parameters objects."""
+ def create_dict(self):
+ return {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ }
+
+class NetconfServerParametersTemplate(BaseTemplate):
+ """A dictionary template for netconf-server-parameters objects."""
+ def create_dict(self):
+ config = Config()
+ return {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "FINGERPRINT_TO_BE_REPLACED",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": config.netconf_username,
+ }
+ ]
+ }
+ }
+
+class TlsEndpointTemplate(BaseTemplate):
+ """A dictionary template for tls-endpoint objects."""
+ def create_dict(self):
+ return {
+ "name": "tls-auth-endpt",
+ "tls": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 6513
+ },
+ "tls-server-parameters": {},
+ "netconf-server-parameters": {}
+ }
+ }
+
+class CallhomeSshEndpointTemplate(BaseTemplate):
+ """A dictionary template for call-home-ssh-endpoint objects."""
+ def create_dict(self):
+ return {
+ "name": "default-ssh-callhome",
+ "ssh": {
+ "tcp-client-parameters": {
+ "remote-address": "TO_BE_OVERWRITTEN",
+ "remote-port": "TO_BE_OVERWRITTEN"
+ },
+ "ssh-server-parameters": {}
+ }
+ }
+
+
+class CallhomeTlsEndpointTemplate(BaseTemplate):
+ """A dictionary template for call-home-tls-endpoint objects."""
+ def create_dict(self):
+ return {
+ "name": "tls-auth-endpt",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "TO_BE_OVERWRITTEN",
+ "remote-port": "TO_BE_OVERWRITTEN"
+ },
+ "tls-server-parameters": {},
+ "netconf-server-parameters": {}
+ }
+ }
+
+class IetfNetconfServerTemplate(BaseTemplate):
+ """A dictionary template for ietf-netconf-server objects."""
+ def create_dict(self):
+ return {
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "endpoints": {
+ "endpoint": []
+ }
+ },
+ "call-home": {
+ "netconf-client": [{
+ "name": "default-client",
+ "endpoints": {
+ "endpoint": []
+ },
+ "connection-type": {
+ "persistent": {
+
+ }
+ }
+ }]
+ }
+ }
+ }
+
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import threading
+import falcon.asgi
+import uvicorn
+
+logger = get_pynts_logger("rest")
+
+class Rest:
+ class DefaultRoute:
+ rest_instance = None
+
+ def __init__(self, rest_instance):
+ self.rest_instance = rest_instance
+
+ async def on_get(self, req, resp):
+ resp.media = {
+ "status": "ok",
+ "routes": self.rest_instance.routes
+ }
+ resp.status = 200
+
+
+ _instance = None
+ server: uvicorn.Server
+ routes: dict
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance.init()
+
+ return cls._instance
+
+ def init(self) -> None:
+ self.routes = {}
+ self.app = falcon.asgi.App()
+ self.app.add_route("/", self.DefaultRoute(self))
+
+ # uvicorn server
+ config = uvicorn.Config(self.app, host="0.0.0.0", port=8080, log_level="info")
+ self.server = uvicorn.Server(config)
+
+ # start REST server
+ logger.info("starting REST server...")
+ thread = threading.Thread(target=self.server.run)
+ thread.start()
+
+ def stop_server(self) -> None:
+ self.server.should_exit = True
+
+ def add_route(self, route: str, object) -> None:
+ self.app.add_route(route, object)
+ self.routes[route] = type(object).__name__
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import json
+import threading
+
+from core.config import Config
+from util.docker import get_container_ip, get_hostname, get_container_mac_address
+from util.datetime import timestamp_in_microseconds, yang_timestamp_with_miliseconds
+import requests
+
+logger = get_pynts_logger("ves")
+lock = threading.Lock()
+
+class VesMessage():
+ data: dict
+
+ domain: str
+ event_type: str
+ priority: str
+ namespace: str|None
+
+ timestampMicrosec: int
+ timestampISO3milisec: int
+ hostname: str
+ mac_address: str
+ ipv4: str|None
+ ipv6: str|None
+
+ def __init__(self, append_port: bool = False, port: int = 830):
+ # commented fields are set on update()
+ self.append_port = append_port
+ self.port = port
+ self.data = {
+ "event": {
+ "commonEventHeader": {
+ # "domain": "@domain@",
+ # "eventId": "ManagedElement=@node-id@",
+ # "eventName": "@domain@_@eventType@",
+ # "eventType": "@eventType@",
+ # "sequence": 0, # @seqId@
+ # "priority": "@priority@",
+ "reportingEntityId": "",
+ # "reportingEntityName": "ManagedElement=@node-id@",
+ # "sourceId": "ManagedElement=@node-id@", # WAS "@managed-element-id@",
+ # "sourceName": "@node-id@",
+ # "startEpochMicrosec": 0, # @timestampMicrosec@
+ # "lastEpochMicrosec": 0, # @timestampMicrosec@
+ "nfNamingCode": "001",
+ # "nfVendorName": "@vendor@",
+ "timeZoneOffset": "+00:00",
+ "version": "4.1",
+ # "stndDefinedNamespace": "", # @namespace@
+ "vesEventListenerVersion": "7.2.1"
+ }
+ }
+ }
+
+ def get(self) -> str:
+ return json.dumps(self.data)
+
+ def update(self) -> None:
+ ves = Ves()
+
+ self.timestampMicrosec = timestamp_in_microseconds()
+ self.timestampISO3milisec = yang_timestamp_with_miliseconds()
+ self.hostname = get_hostname() if self.append_port is False else get_hostname() + "_" + str(self.port)
+ self.mac_address = get_container_mac_address()
+ self.ipv4 = get_container_ip()
+ self.ipv6 = None # checkAL
+
+
+ self.data["event"]["commonEventHeader"]["domain"] = self.domain
+ self.data["event"]["commonEventHeader"]["eventId"] = "ManagedElement=" + self.hostname + "_" + self.domain
+ self.data["event"]["commonEventHeader"]["eventName"] = self.domain + "_" + self.event_type
+ self.data["event"]["commonEventHeader"]["eventType"] = self.event_type
+ self.data["event"]["commonEventHeader"]["sequence"] = ves.seq_id
+ self.data["event"]["commonEventHeader"]["priority"] = self.priority
+ self.data["event"]["commonEventHeader"]["reportingEntityName"] = "ManagementElement=" + self.hostname
+ self.data["event"]["commonEventHeader"]["sourceId"] = "ManagementElement=" + self.hostname
+ self.data["event"]["commonEventHeader"]["sourceName"] = self.hostname
+ self.data["event"]["commonEventHeader"]["startEpochMicrosec"] = self.timestampMicrosec
+ self.data["event"]["commonEventHeader"]["lastEpochMicrosec"] = self.timestampMicrosec
+
+ self.data["event"]["commonEventHeader"]["nfVendorName"] = ves.vendor
+ if self.namespace:
+ self.data["event"]["commonEventHeader"]["stndDefinedNamespace"] = self.namespace
+
+class Ves:
+ _instance = None
+ config: Config
+
+ seq_id = 0
+ vendor = ""
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+
+ cls._instance.config = Config()
+ cls._instance.seq_id = 0
+ cls._instance.vendor = "pynts"
+ return cls._instance
+
+
+ def execute(self, message: VesMessage) -> bool:
+ result = False
+ with lock:
+ url = self.config.ves_url
+
+ headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'X-MinorVersion': '1'
+ }
+
+ auth = None
+ if self.config.ves_username != "" and self.config.ves_password != "":
+ auth = (self.config.ves_username, self.config.ves_password)
+
+ message.update()
+ message_str = message.get()
+
+ logger.debug(f"POST {url} -> {message_str}")
+
+ if url != "":
+ response = requests.post(url, headers=headers, auth=auth, data=message_str, verify=False, timeout=5.0)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ result = True
+ else:
+ logger.error(f"request failed with status code {response.status_code} and response {response.text}")
+ else:
+ result = True
+
+ if result:
+ self.seq_id = self.seq_id + 1
+
+ return result
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+from datetime import datetime
+from util.datetime import yang_datetime_to_datetime, datetime_to_yang_datetime, datetime_utcnow
+from strenum import StrEnum
+
+logger = get_pynts_logger("alarm")
+
+class PerceivedSeverity(StrEnum):
+ CLEARED = "cleared"
+ # indeterminate falls back to WARNING on o-ran-fm
+ INDETERMINATE = "indeterminate"
+ WARNING = "warning"
+ MINOR = "minor"
+ MAJOR = "major"
+ CRITICAL = "critical"
+
+class Alarm:
+ # combined id
+ c_id: str
+ _times_raised: int
+ _times_cleared: int
+
+ resource: str
+ alarm_type_id: str
+ alarm_type_qualifier: str
+
+ is_cleared: bool
+ perceived_severity: PerceivedSeverity
+
+ time_created: datetime
+ last_raised: datetime
+ last_changed: datetime
+
+ alarm_text: str
+
+ def __init__(self) -> None:
+ raise Exception("Can't create an empty alarm.")
+
+ def __init__(self, resource: str, alarm_type_id: str, alarm_type_qualifier: str):
+ self.resource = resource
+ self.alarm_type_id = alarm_type_id
+ self.alarm_type_qualifier = alarm_type_qualifier
+ self.c_id = self.resource + self.alarm_type_id + self.alarm_type_qualifier
+ self._times_raised = 0
+ self._times_cleared = 0
+
+ from fault_management.fault_management import FaultManagement
+ self.fault_management: FaultManagement = FaultManagement()
+
+ def alarm_raise(self, severity:PerceivedSeverity|None = None) -> None:
+ if self.is_cleared:
+ if severity is not None:
+ if severity == PerceivedSeverity.CLEARED:
+ raise ValueError("Can't raise an alarm with CLEARED severity.")
+ self.perceived_severity = severity
+ self.is_cleared = False
+ self.last_changed = datetime_utcnow()
+ self.last_raised = self.last_changed
+
+ self._times_raised = self._times_raised + 1
+
+ self.fault_management.on_alarm_change(self)
+
+ def alarm_clear(self) -> None:
+ if not self.is_cleared:
+ self.is_cleared = True
+ self.last_changed = datetime_utcnow()
+
+ self._times_cleared = self._times_cleared + 1
+
+ self.fault_management.on_alarm_change(self)
+
+ def alarm_notify(self) -> None:
+ self.fault_management.send_notification(self)
+
+ def counters_get(self) -> dict:
+ return {"raised": self._times_raised, "cleared": self._times_cleared}
+
+ def counters_clear(self) -> None:
+ self._times_raised = 0
+ self._times_cleared = 0
+
+
+ @staticmethod
+ def from_ietf_alarm(data: dict):
+ alarm = Alarm(data["resource"], data["alarm-type-id"], data["alarm-type-qualifier"])
+
+ a = alarm.fault_management.get_alarm(alarm.c_id)
+ if a is None:
+ alarm.fault_management.add_alarm(alarm)
+ else:
+ alarm = a
+
+ alarm.is_cleared = data["is-cleared"]
+ alarm.perceived_severity = PerceivedSeverity(data["perceived-severity"])
+ alarm.alarm_text = data["alarm-text"]
+
+ if "time-created" in data and "last-raised" in data and "last-changed" in data:
+ alarm.time_created = yang_datetime_to_datetime(data["time-created"])
+ alarm.last_raised = yang_datetime_to_datetime(data["last-raised"])
+ alarm.last_changed = yang_datetime_to_datetime(data["last-changed"])
+ else:
+ alarm_time = datetime_utcnow()
+ alarm.time_created = alarm_time
+ alarm.last_raised = alarm_time
+ alarm.last_changed = alarm_time
+
+ if alarm.is_cleared:
+ logger.warn(f"Alarm with id {alarm.c_id} was created as cleared.")
+
+
+ if alarm.is_cleared:
+ alarm._times_cleared = alarm._times_cleared + 1
+ else:
+ alarm._times_raised = alarm._times_raised + 1
+
+ alarm.fault_management.on_alarm_change(alarm)
+ return alarm
+
+
+ @staticmethod
+ def from_ietf_alarm_notif(notif: dict):
+ alarm = Alarm(notif["resource"], notif["alarm-type-id"], notif["alarm-type-qualifier"])
+
+ alarm_time = datetime_utcnow()
+ if "time" in notif:
+ alarm_time = yang_datetime_to_datetime(notif["time"])
+
+ a = alarm.fault_management.get_alarm(alarm.c_id)
+ if a is None:
+ alarm.time_created = alarm_time
+ alarm.last_raised = alarm_time
+ alarm.fault_management.add_alarm(alarm)
+ else:
+ alarm = a
+
+ if "perceived-severity" in notif:
+ alarm.is_cleared = False
+ perceived_severity = PerceivedSeverity(notif["perceived-severity"])
+ if perceived_severity == PerceivedSeverity.CLEARED:
+ if alarm.perceived_severity is None:
+ alarm.perceived_severity = PerceivedSeverity.INDETERMINATE
+ alarm.is_cleared = True
+ else:
+ alarm.perceived_severity = perceived_severity
+ alarm.last_raised = alarm_time
+
+ if "is-cleared" in notif:
+ alarm.is_cleared = notif["is-cleared"]
+
+ if "alarm-text" in notif:
+ alarm.alarm_text = notif["alarm-text"]
+
+ alarm.last_changed = alarm_time
+
+ if alarm.is_cleared:
+ alarm._times_cleared = alarm._times_cleared + 1
+ else:
+ alarm._times_raised = alarm._times_raised + 1
+
+
+ alarm.fault_management.on_alarm_change(alarm)
+ return alarm
+
+ def to_ietf_alarm(self) -> dict:
+ data = {}
+ data["resource"] = self.resource
+ data["alarm-type-id"] = self.alarm_type_id
+ data["alarm-type-qualifier"] = self.alarm_type_qualifier
+
+ data["is-cleared"] = self.is_cleared
+ data["perceived-severity"] = str(self.perceived_severity)
+
+ data["time-created"] = datetime_to_yang_datetime(self.time_created)
+ data["last-raised"] = datetime_to_yang_datetime(self.last_raised)
+ data["last-changed"] = datetime_to_yang_datetime(self.last_changed)
+
+ data["alarm-text"] = self.alarm_text
+
+ return data
+
+
+
+ def to_ietf_alarm_notif(self) -> dict:
+ data = {}
+ data["resource"] = self.resource
+ data["alarm-type-id"] = self.alarm_type_id
+ data["alarm-type-qualifier"] = self.alarm_type_qualifier
+
+ if self.is_cleared:
+ data["perceived-severity"] = PerceivedSeverity.CLEARED
+ else:
+ data["perceived-severity"] = str(self.perceived_severity)
+
+ data["time"] = datetime_to_yang_datetime(self.last_changed)
+
+ data["alarm-text"] = self.alarm_text
+
+ return data
+
+
+
+
+ # ietf-alarms o-ran-fm
+
+ # resource: str fault-source: str
+ # alarm_type_id: str alarm_type: str ... e de fapt enum
+ # alarm_type_qual: str fault_id: uint16
+
+ # is_cleared: bool is_cleared: bool
+ # perceived_severity: enum fault_severty: enum
+
+ # time_created: datettime ... se pot scoate din cod
+ # last_raised: datettime ... se pot scoate din cod
+ # last_changed: datettime event_time: datetime
+
+ # alarm_text: str fault_text: str
+
+
+
+ # @staticmethod
+ # def from_oran_fm(data: dict):
+ # alarm = Alarm()
+ # alarm.resource = data["fault-source"]
+ # # alarm.alarm_type_id = data["alarm-type-id"]
+ # alarm.alarm_type_qual = data["fault-id"]
+
+ # alarm.is_cleared = data["is-cleared"]
+ # alarm.perceived_severity = data["fault-severity"]
+
+ # alarm_time = data["event-time"]
+
+ # # update these checkAL
+ # # alarm.time_created = data["time-created"]
+ # # alarm.last_raised = data["last-raised"] # checkAL
+ # # alarm.last_changed = data["last-changed"]
+
+ # alarm.alarm_text = data["fault-text"]
+
+
+
+ # return alarm
+
+ # def to_oran_fm(self) -> dict:
+ # return {}
+
+ # @staticmethod
+ # def from_oran_fm_notif(notif: dict):
+ # return Alarm.from_oran_fm(notif)
+
+ # def to_oran_fm_notif(self) -> dict:
+ # return self.to_oran_fm()
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import threading
+import json
+from pathlib import Path
+from typing import Any, Optional
+from datetime import datetime
+from util.datetime import ensure_aware, yang_datetime_to_datetime, datetime_utcnow
+from util.threading import stop_event, sa_sleep
+from core.netconf import Netconf, Datastore
+from core.rest import Rest
+from fault_management.alarm import Alarm
+
+logger = get_pynts_logger("fault-management")
+
+# Event to signal threads to stop
+fault_stop_event = threading.Event()
+
+class FaultManagement:
+ _instance = None
+
+ _ietf_alarms: bool = False
+ _o_ran_fm: bool = False
+
+ netconf: Netconf
+ rest: Rest
+
+ alarms: dict[str, Alarm]
+ last_changed: datetime
+
+ alarm_config: dict
+ alarm_steps: list
+
+ disabled: bool = False
+ stopped: bool = True
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance.init()
+
+ return cls._instance
+
+ def init(self):
+ self.netconf = Netconf()
+ self.rest = Rest()
+
+ self.alarms = {}
+
+ self.last_changed = datetime_utcnow()
+
+ with self.netconf.connection.get_ly_ctx() as ctx:
+ try:
+ ctx.get_module("ietf-alarms")
+ self._ietf_alarms = True
+ except:
+ self._ietf_alarms = False
+
+ try:
+ ctx.get_module("o-ran-fm")
+ self._o_ran_fm = True
+ except:
+ self._o_ran_fm = False
+
+ if self._ietf_alarms and self._o_ran_fm:
+ logger.error(f"fault-management can't work with both ietf-alarms and o-ran-fm")
+ self.disabled = True
+ return
+
+ if self._ietf_alarms:
+ logger.info("ietf-alarms found and registered as a fault-management provider")
+
+ if self._o_ran_fm:
+ logger.info("o-ran-fm found and registered as a fault-management provider")
+
+ if not self._ietf_alarms and not self._o_ran_fm:
+ logger.warn("fault-management disabled as there is no registered provider")
+ self.disabled = True
+ return
+
+ self.rest.add_route("/fault-management", FaultManagementRest())
+ self.rest.add_route("/fault-management/start", FaultManagementRest())
+ self.rest.add_route("/fault-management/stop", FaultManagementRest())
+ self.rest.add_route("/fault-management/counters", FaultManagementRest())
+ self.rest.add_route("/fault-management/counters/clear", FaultManagementRest())
+
+ def add_alarm(self, alarm: Alarm) -> None:
+ if alarm.c_id in self.alarms:
+ raise ValueError(f"Alarm with c_id {alarm.c_id} already exists.")
+
+ self.alarms[alarm.c_id] = alarm
+
+ def get_alarm(self, c_id) -> Alarm|None:
+ return self.alarms.get(c_id, None)
+
+ def contains_alarm(self, c_id) -> bool:
+ return c_id in self.alarms
+
+ def get_alarms(self) -> list[Alarm]:
+ return list(self.alarms.values())
+
+ def on_alarm_change(self, alarm: Alarm) -> None:
+ alarm.last_changed = ensure_aware(alarm.last_changed)
+ self.last_changed = ensure_aware(self.last_changed)
+ if alarm.last_changed > self.last_changed:
+ self.last_changed = alarm.last_changed
+
+ def load_active_alarms(self) -> None:
+ # load current alarms from datastore
+ if self._ietf_alarms:
+ xpath = "/ietf-alarms:alarms"
+
+ # get active alarm list if any
+ current_alarms_dict = self.netconf.get_data(Datastore.OPERATIONAL, xpath)
+ if 'alarms' in current_alarms_dict and 'alarm-list' in current_alarms_dict['alarms']:
+ alarm_list = current_alarms_dict['alarms']['alarm-list']
+
+ if 'alarm' in alarm_list and 'last-changed' in alarm_list:
+ self.last_changed = yang_datetime_to_datetime(alarm_list["last-changed"])
+
+ for alarm in alarm_list['alarm']:
+ new_alarm = Alarm.from_ietf_alarm(alarm)
+ logger.info(f"added to alarm list {new_alarm.alarm_text}")
+
+ # subscribe to active alarm list
+ self.netconf.operational.subscribe_oper_data_request("ietf-alarms", xpath, self._callback_oper_ietf_alarms_list)
+
+ if self._o_ran_fm:
+ xpath = "/o-ran-fm:active-alarm-list"
+
+ # get active alarm list if any
+ current_alarms_dict = self.netconf.get_data(Datastore.OPERATIONAL, xpath)
+ checkAL
+
+ # subscribe to active alarm list
+ # self.netconf.operational.subscribe_oper_data_request("o-ran-fm", xpath, self._callback_oper_o_ran_fm_list)
+
+ def load_alarms(self, alarm_data = None):
+ if alarm_data is None:
+ # read data from fault-management/index.json
+ alarms_path = '/data/fault-management/index.json'
+ alarm_data = {}
+ if Path(alarms_path).exists():
+ # Read and parse the JSON file
+ with open(alarms_path, 'r') as file:
+ alarm_data = json.load(file)
+ else:
+ raise Exception("settings file not found; stopping fault-management")
+
+ alarm_steps = alarm_data["alarms"]
+
+ total_delay = 0
+ for step in alarm_steps:
+ if 'delay' in step:
+ total_delay += step["delay"]
+
+ if total_delay == 0:
+ raise Exception("for configured alarms there is a total delay of 0; stopping fault-management")
+
+ self.alarm_config = alarm_data["config"]
+ self.alarm_steps = alarm_steps
+
+ if "loop" not in self.alarm_config:
+ self.alarm_config["config"] = True
+
+ def start(self, alarm_data = None) -> dict:
+ if self.disabled:
+ return {"code": 500, "message": "feature is disabled; check log"}
+
+ if self.stopped is False:
+ return {"code": 500, "message": "feature is already running"}
+
+ try:
+ self.load_alarms(alarm_data)
+ except Exception as e:
+ logger.error(e)
+ return {"code": 500, "message": e.__traceback__}
+
+ # clear stopped
+ fault_stop_event.clear()
+ self.stopped = False
+
+ # start fault management thread
+ logger.info("starting fault management thread...")
+ thread = threading.Thread(target=self.fault_management_task)
+ thread.start()
+ return {"code": 200, "message": "ok"}
+
+ def stop(self) -> dict:
+ if self.stopped:
+ return {"code": 500, "message": "feature is already stopped"}
+ else:
+ fault_stop_event.set()
+ return {"code": 200, "message": "ok"}
+
+ def _callback_oper_ietf_alarms_list(self, xpath: str, private_data: Any) -> Optional[dict]:
+ return {
+ "alarms": {
+ "alarm-list":
+ {
+ "number-of-alarms": len(self.alarms),
+ "last-changed": self.last_changed.replace(microsecond=0).isoformat(),
+ "alarm": [
+ a.to_ietf_alarm() for a in self.get_alarms()
+ ]
+ }
+ }
+ }
+
+ def _callback_oper_o_ran_fm_list(self, xpath: str, private_data: Any) -> Optional[dict]:
+ return {
+ "active-alarms": [
+ a.to_oran_fm() for a in self.get_alarms() if not a.is_cleared
+ ]
+ }
+
+ def send_notification(self, alarm: Alarm) -> None:
+ xpath = ""
+ if self._ietf_alarms:
+ xpath = "/ietf-alarms:alarm-notification"
+ self.netconf.running.notification_send(xpath, alarm.to_ietf_alarm_notif())
+ logger.info(f"sending alarm notif {alarm.alarm_text}/cleared:{alarm.is_cleared} to {xpath}")
+
+ if self._o_ran_fm:
+ xpath = "/o-ran-fm:alarm-notif"
+ self.netconf.running.notification_send(xpath, alarm.to_oran_fm_notif())
+ logger.info(f"sending alarm notif {alarm.alarm_text}/cleared:{alarm.is_cleared} to {xpath}")
+
+ if xpath == "":
+ raise Exception("no alarm sent, as no provider found")
+
+ def fault_management_task(self):
+ current_step = -1
+ while not self.stopped and not stop_event.is_set() and not fault_stop_event.is_set():
+ current_step = current_step + 1
+ if current_step >= len(self.alarm_steps):
+ if self.alarm_config["loop"]:
+ current_step = 0
+ else:
+ break
+
+ step = self.alarm_steps[current_step]
+
+ if 'alarm' in step:
+ alarm = None
+ if self._ietf_alarms:
+ alarm = Alarm.from_ietf_alarm_notif(step['alarm'])
+
+ if self._o_ran_fm:
+ alarm = Alarm.from_oran_fm_notif(step['alarm'])
+
+ alarm.alarm_notify()
+
+ if 'delay' in step:
+ current_delay = step['delay']
+ sa_sleep(current_delay, fault_stop_event)
+
+ self.stopped = True
+ logger.info("thread finished")
+
+class FaultManagementRest:
+ _instance = None
+ fm: FaultManagement
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance.fm = FaultManagement()
+
+ return cls._instance
+
+ async def on_get(self, req, resp):
+ if req.url.endswith("/fault-management"):
+ resp.media = {"stopped": self.fm.stopped, "disabled": self.fm.disabled, "config": self.fm.alarm_config}
+ resp.status = 200
+ elif req.url.endswith("/fault-management/counters"):
+ resp.media = self.get_alarm_counters()
+ resp.status = 200
+ else:
+ resp.media = {"message": "not found"}
+ resp.status = 404
+
+ async def on_post(self, req, resp):
+ if req.url.endswith("/fault-management/start"):
+ data = await req.get_media()
+ start = self.fm.start(data)
+ resp.media = {"message": start["message"], "stopped": self.fm.stopped, "disabled": self.fm.disabled, "config": self.fm.alarm_config}
+ resp.status = start["code"]
+
+ elif req.url.endswith("/fault-management/stop"):
+ stop = self.fm.stop()
+ resp.media = {"message": stop["message"], "stopped": self.fm.stopped, "disabled": self.fm.disabled, "config": self.fm.alarm_config}
+ resp.status = stop["code"]
+
+ elif req.url.endswith("/fault-management/counters/clear"):
+ self.clear_alarm_counters()
+ resp.media = {"status": "cleared", "counters": self.get_alarm_counters()}
+ resp.status = 200
+
+ else:
+ resp.media = {"message": "not found"}
+ resp.status = 404
+
+ def get_alarm_counters(self) -> dict:
+ counters = {}
+ for alarm in self.fm.alarms:
+ counters[alarm] = self.fm.alarms[alarm].counters_get()
+ return counters
+
+ def clear_alarm_counters(self) -> None:
+ for alarm in self.fm.alarms:
+ self.fm.alarms[alarm].counters_clear()
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from core.ves import VesMessage
+from alarm import Alarm
+
+class VesAlarm(VesMessage):
+ def __init__(self, alarm: Alarm):
+ super().__init__()
+
+ self.data["event"]["stndDefinedFields"] = {
+ "schemaReference": "https://forge.3gpp.org/rep/sa5/MnS/blob/Rel-18/OpenAPI/TS28532_FaultMnS.yaml#components/schemas/NotifyNewAlarm",
+ "stndDefinedFieldsVersion": "1.0",
+ "data": {
+ "href": "href1",
+ "notificationId": 0, #@notification-id@,
+ "notificationType": "notifyNewAlarm", # notifyClearedAlarm
+ "eventTime": "@timestampISO3milisec@",
+ "systemDN": "ManagedElement=@node-id@",
+ "alarmId": "@object-instance@-@alarm@",
+ "alarmType": "@alarm-type@",
+ "probableCause": "@alarm@",
+ "specificProblem": "@alarm@", # gone
+ "perceivedSeverity": "@severity@", # "CLEARED"
+
+ # "clearUserId": "@vendor@",
+ # "clearSystemId": "@vendor@"
+
+ "backedUpStatus": True,
+ "trendIndication": "MORE_SEVERE",
+ "stateChangeDefinition": [{ "operational-state": "DISABLED" }],
+ "proposedRepairActions": "Add more units",
+ "additionalText": "Open Air Interface",
+ "rootCauseIndicator": False
+ }
+ }
+
+ self.namespace = "3GPP-FaultSupervision"
+ self.domain = "stndDefined"
+ self.priority = "Low"
+ self.event_type = "PyNTS_Alarm"
+
+ def update(self) -> None:
+ super().update()
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import schedule
+import threading
+
+from core.config import Config
+from core.netconf import Netconf
+from cryptography import x509
+from cryptography.hazmat.backends import default_backend
+from datetime import datetime, timedelta, timezone
+from util.crypto import CryptoUtils
+from util.threading import stop_event, sa_sleep
+
+logger = get_pynts_logger("feature-certificate-expiration-notifier")
+
+class CertificateExpirationNotifierFeature:
+ def __init__(self) -> None:
+ self.config = Config()
+ self.cryptoUtils = CryptoUtils()
+ self.netconf = Netconf()
+
+ def start(self) -> None:
+ certificate = x509.load_pem_x509_certificate(self.cryptoUtils.odu_certificate, default_backend())
+ self.expiration_date = certificate.not_valid_after_utc
+ self.formatted_date = self.expiration_date.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z" # YANG date-and-time format
+
+ if self.config.is_tls_enabled():
+ thread = threading.Thread(target=self.run_scheduler)
+ thread.start()
+ else:
+ logger.debug("Not starting certificate expiration notification feature, TLS is not enabled...")
+
+ def run_scheduler(self):
+ # Schedule the job to run every day
+ schedule.every().day.do(self.certificate_expiration_job)
+
+ # Loop so that the scheduling task keeps on running all time.
+ while not stop_event.is_set():
+ schedule.run_pending()
+ sa_sleep(3600)
+
+ logger.info("thread finished")
+
+
+ def certificate_expiration_job(self):
+ # Get the current date and time
+ current_date = datetime.now(timezone.utc)
+ if self.expiration_date < (current_date + timedelta(days=30)):
+ logger.debug(f"Certificate expiring in less that 30 days ({self.expiration_date}). Sending certificate-expiration notification..")
+
+ if self.config.tls_callhome_endpoint:
+ d = self.netconf.running.get_item("/ietf-netconf-server:netconf-server/call-home/netconf-client/endpoints/endpoint/tls/tls-server-parameters/server-identity/certificate/inline-definition")
+ elif self.config.tls_listen_endpoint:
+ d = self.netconf.running.get_item("/ietf-netconf-server:netconf-server/listen/endpoints/endpoint/tls/tls-server-parameters/server-identity/certificate/inline-definition")
+
+ self.netconf.running.notification_send(d.xpath + "/certificate-expiration", {"expiration-date": self.formatted_date})
+
+
+
+
+
+
+
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+
+from core.dict_factory import DictFactory, BaseTemplate
+from core.netconf import Datastore, Netconf
+from util.crypto import CryptoUtils
+
+logger = get_pynts_logger("feature-ietf-keystore-truststore")
+
+class IetfKeystoreTruststoreFeature:
+ def __init__(self) -> None:
+ DictFactory.add_template("ietf-keystore", IetfKeystoreTemplate)
+ DictFactory.add_template("ietf-truststore", IetfTruststoreTemplate)
+ self.netconf: Netconf = Netconf()
+ self.crypto: CryptoUtils = CryptoUtils()
+
+ def configure(self) -> None:
+ ietf_keystore_template = DictFactory.get_template("ietf-keystore")
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 0, "public-key"], self.crypto.get_public_key_ssh_format())
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 0, "cleartext-private-key"], self.crypto.get_private_key_base64_encoding_no_markers())
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 0, "certificates", "certificate", 0, "cert-data"], self.crypto.get_certificate_base64_encoding_no_markers(is_smo=False))
+
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 1, "public-key"], self.crypto.get_public_key_base64_encoding_no_markers())
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 1, "cleartext-private-key"], self.crypto.get_private_key_base64_encoding_no_markers())
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 1, "certificates", "certificate", 0, "cert-data"], self.crypto.get_certificate_base64_encoding_no_markers(is_smo=False))
+ ietf_keystore_template.update_key(["ietf-keystore:keystore", "asymmetric-keys", "asymmetric-key", 1, "certificates", "certificate", 1, "cert-data"], self.crypto.get_certificate_base64_encoding_no_markers(is_smo=True))
+
+ self.netconf.set_data(Datastore.RUNNING, "ietf-keystore", ietf_keystore_template.data, "merge")
+ self.netconf.set_data(Datastore.OPERATIONAL, "ietf-keystore", ietf_keystore_template.data)
+
+ ietf_truststore_template = DictFactory.get_template("ietf-truststore")
+ ietf_truststore_template.update_key(["ietf-truststore:truststore", "certificate-bags", "certificate-bag", 0, "certificate", 0, "cert-data"], self.crypto.get_ca_certificate_base64_encoding_no_markers(is_smo=False))
+ ietf_truststore_template.update_key(["ietf-truststore:truststore", "certificate-bags", "certificate-bag", 0, "certificate", 1, "cert-data"], self.crypto.get_ca_certificate_base64_encoding_no_markers(is_smo=True))
+
+ self.netconf.set_data(Datastore.RUNNING, "ietf-truststore", ietf_truststore_template.data, "merge")
+ self.netconf.set_data(Datastore.OPERATIONAL, "ietf-truststore", ietf_truststore_template.data)
+
+ logger.info("succesfully configured ietf-keystore and ietf-truststore")
+
+
+class IetfKeystoreTemplate(BaseTemplate):
+ """A dictionary template for ietf-keystore objects."""
+ def create_dict(self):
+ return {
+ "ietf-keystore:keystore":{
+ "asymmetric-keys":{
+ "asymmetric-key":[
+ {
+ "name":"serverkey-ssh",
+ "public-key-format":"ietf-crypto-types:ssh-public-key-format",
+ "public-key":"PUB_KEY_TO_BE_REPLACED",
+ "private-key-format":"ietf-crypto-types:rsa-private-key-format",
+ "cleartext-private-key":"PRIV_KEY_TO_BE_REPLACED",
+ "certificates":{
+ "certificate":[
+ {
+ "name":"servercert-smo",
+ "cert-data":"CERT_TO_BE_REPLACED"
+ }
+ ]
+ }
+ },
+ {
+ "name":"serverkey-tls",
+ "public-key-format":"ietf-crypto-types:subject-public-key-info-format",
+ "public-key":"PUB_KEY_TO_BE_REPLACED",
+ "private-key-format":"ietf-crypto-types:rsa-private-key-format",
+ "cleartext-private-key":"PRIV_KEY_TO_BE_REPLACED",
+ "certificates":{
+ "certificate":[
+ {
+ "name":"servercert-odu",
+ "cert-data":"CERT_TO_BE_REPLACED"
+ },
+ {
+ "name":"servercert-smo",
+ "cert-data":"CERT_TO_BE_REPLACED"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+
+
+class IetfTruststoreTemplate(BaseTemplate):
+ """A dictionary template for ietf-truststore objects."""
+ def create_dict(self):
+ return {
+ "ietf-truststore:truststore":{
+ "certificate-bags":{
+ "certificate-bag":[
+ {
+ "name":"cacerts",
+ "description":"CA Certificates",
+ "certificate":[
+ {
+ "name":"root_odu_cert",
+ "cert-data":"TO_BE_REPLACED"
+ },
+ {
+ "name":"root_smo_cert",
+ "cert-data":"TO_BE_REPLACED"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+
+from core.dict_factory import DictFactory, BaseTemplate
+from core.netconf import Datastore, Netconf
+from util.docker import get_hostname, get_container_ip
+
+logger = get_pynts_logger("feature-ietf-system")
+
+class IetfSystemFeature:
+ def __init__(self) -> None:
+ DictFactory.add_template("ietf-system", IetfSystemTemplate)
+ self.netconf: Netconf = Netconf()
+
+ def configure(self) -> None:
+ ietf_system_template = DictFactory.get_template("ietf-system")
+ ietf_system_template.update_key(["ietf-system", "system", "hostname"], get_hostname())
+ ietf_system_template.update_key(["ietf-system", "system", "onap-system:web-ui"], "http://" + get_container_ip())
+
+ self.netconf.set_data(Datastore.RUNNING, "", ietf_system_template.data)
+ self.netconf.set_data(Datastore.OPERATIONAL, "", ietf_system_template.data)
+ logger.info("succesfully configured")
+
+
+class IetfSystemTemplate(BaseTemplate):
+ """A dictionary template for ietf-system objects."""
+ def create_dict(self):
+ return {
+ "ietf-system": {
+ "system": {
+ "contact": "Network Topology Simulator",
+ "hostname": "TO_BE_REPLACED_HOSTNAME",
+ "onap-system:web-ui": "TO_BE_REPLACED_URL"
+ }
+ }
+ }
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+
+from core.dict_factory import DictFactory, BaseTemplate
+from core.netconf import Netconf
+
+logger = get_pynts_logger("ietf-netconf-acm")
+
+class NetconfAcmFeature:
+ def __init__(self) -> None:
+ DictFactory.add_template("netconf-acm-enabled", NetconfAcmTemplateEnabled)
+ DictFactory.add_template("netconf-acm-disabled", NetconfAcmTemplateDisabled)
+ self.netconf: Netconf = Netconf()
+
+ def configure(self, enabled: bool = False) -> None:
+ nacm_template = DictFactory.get_template("netconf-acm-enabled") if enabled else DictFactory.get_template("netconf-acm-disabled")
+
+ with self.netconf.connection.start_session("running") as sess:
+ sess.replace_config(nacm_template.data, "ietf-netconf-acm")
+ with self.netconf.connection.start_session("operational") as sess:
+ sess.edit_batch(nacm_template.data, "ietf-netconf-acm")
+ sess.apply_changes()
+ logger.info("succesfully configured")
+
+
+class NetconfAcmTemplateEnabled(BaseTemplate):
+ """A dictionary template for netconf-acm objects, when ACM is enabled."""
+ def create_dict(self):
+ return {
+ "nacm": {
+ "enable-nacm": True,
+ "groups": {
+ "group": [
+ {
+ "name": "sudo",
+ "user-name": ["sudo", "oranuser"]
+ },
+ {
+ "name": "smo",
+ "user-name": ["smo"]
+ },
+ {
+ "name": "hybrid-odu",
+ "user-name": ["hybrid-odu"]
+ },
+ {
+ "name": "carrier",
+ "user-name": ["carrier"]
+ }
+ ]
+ }
+ }
+ }
+
+
+class NetconfAcmTemplateDisabled(BaseTemplate):
+ """A dictionary template for netconf-acm objects, when ACM is disabled."""
+ def create_dict(self):
+ return {
+ "nacm": {
+ "enable-nacm": False
+ }
+ }
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import schedule
+import threading
+
+from core.config import Config
+from core.netconf import Netconf
+from core.ves import VesMessage, Ves
+from util.threading import stop_event, sa_sleep
+
+logger = get_pynts_logger("ves-heartbeat")
+
+class VesHeartbeatFeature:
+ def __init__(self) -> None:
+ self.config = Config()
+ self.netconf = Netconf()
+ self.ves = Ves()
+
+ def start(self) -> None:
+ logger.info("starting...")
+
+ self.interval = 30
+ self.ves_heartbeat: VesHeartbeat = VesHeartbeat(self.interval)
+ thread = threading.Thread(target=self.run_scheduler)
+ thread.start()
+
+ def run_scheduler(self):
+ # Schedule the job to run
+ schedule.every(self.interval).seconds.do(self.heartbeat)
+
+ # Loop so that the scheduling task keeps on running all time.
+ while not stop_event.is_set():
+ schedule.run_pending()
+ sa_sleep(self.interval)
+
+ logger.info("thread finished")
+
+
+ def heartbeat(self):
+ logger.info("heartbeat event")
+ self.ves.execute(self.ves_heartbeat)
+
+
+class VesHeartbeat(VesMessage):
+ def __init__(self, interval: int):
+ super().__init__()
+
+ self.data["event"]["heartbeatFields"] = {
+ "heartbeatFieldsVersion": "3.0",
+ "heartbeatInterval": interval,
+ "additionalFields": {
+ "eventTime": "@timestampISO3milisec@"
+ }
+ }
+
+ self.namespace = None
+ self.domain = "HeartBeat"
+ self.priority = "Low"
+ self.event_type = "PyNTS_HeartBeat"
+
+ def update(self) -> None:
+ super().update()
+
+ self.data["event"]["heartbeatFields"]["additionalFields"]["eventTime"] = self.timestampISO3milisec
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import threading
+from util.logging import get_pynts_logger
+
+from core.config import Config
+from core.netconf import Netconf
+from core.ves import Ves, VesMessage
+from util.threading import sa_sleep
+
+logger = get_pynts_logger("feature-ves-pnfregistration")
+
+SEND_TIMEOUT = 10 # seconds
+
+class VesPnfRegistrationFeature:
+ def __init__(self) -> None:
+ self.ves: Ves = Ves()
+ self.listen_endpoints: list = []
+
+ def start(self) -> None:
+ self.netconf = Netconf()
+
+ self.get_listen_connections()
+ self.start_pnf_registration_thread()
+
+ def start_pnf_registration_thread(self):
+ logger.debug(f"Starting pnfRegistration thread...")
+ request_thread = threading.Thread(target=self.send_pnf_registrations_in_background)
+ request_thread.daemon = True # Set as daemon so it exits when the main program exits
+ request_thread.start()
+
+ def send_pnf_registrations_in_background(self):
+ logger.debug(f"Started pnfRegistration thread...")
+ success = {i: False for i in range(len(self.listen_endpoints))}
+ append_port = bool(len(self.listen_endpoints) > 1)
+
+ while not all(success.values()):
+ for i, instance in enumerate(self.listen_endpoints):
+ if not success[i]:
+ try:
+ if instance['isTls']:
+ pnf_registration_tls: VesMessage = VesPnfRegistrationTLS(instance['name'], instance['port'], append_port)
+ result = self.ves.execute(pnf_registration_tls)
+ if result is True:
+ success[i] = True
+ elif not instance['isTls']:
+ pnf_registration_ssh: VesMessage = VesPnfRegistrationSSH(instance['port'], instance['nc_user'], instance['nc_pass'], append_port)
+ result = self.ves.execute(pnf_registration_ssh)
+ if result is True:
+ success[i] = True
+ except Exception as e:
+ logger.error(f"Could not send vesPnfRegistration. Error: {e}")
+
+ # Wait 10 seconds before retrying any failed requests
+ if not all(success.values()):
+ remaining_requests = len([key for key, value in success.items() if not value])
+ logger.debug(f"Still need to send {remaining_requests} pnfRegistration messages...")
+ sa_sleep(SEND_TIMEOUT)
+
+ logger.info(f"VES pnfRegistration finished successfully!")
+
+ def get_listen_connections(self):
+ data = self.netconf.running.get_data("/ietf-netconf-server:netconf-server/listen/endpoints/endpoint")
+
+ endpoints = data
+ try:
+ for key in ['netconf-server', 'listen', 'endpoints', 'endpoint']:
+ endpoints = endpoints[key]
+
+ if isinstance(endpoints, list):
+ for endpoint in endpoints:
+ if 'tls' in endpoint:
+ try:
+ port = endpoint['tls']['tcp-server-parameters']['local-port']
+ name = endpoint['name']
+ self.listen_endpoints.append({'name': name, 'port': port, 'isTls': True})
+ logger.debug(f"Found TLS connection with port {port} and name {name}")
+ except KeyError as e:
+ logger.error(f"Could not find port in object {endpoint}. Error: {e}")
+ elif 'ssh' in endpoint:
+ try:
+ port = endpoint['ssh']['tcp-server-parameters']['local-port']
+ name = endpoint['name']
+ users = endpoint['ssh']['ssh-server-parameters']['client-authentication']['users']['user']
+ for user in users:
+ netconf_username = user['name']
+ netconf_password = user['password']
+ netconf_password = netconf_password[3:] # prune the $0$ string that is prepended to the password
+
+ self.listen_endpoints.append({'name': name, 'port': port, 'isTls': False, 'nc_user': netconf_username, 'nc_pass': netconf_password})
+ logger.debug(f"Found SSH connection with port {port} and name {name} and username {netconf_username} and pass {netconf_password}")
+ except KeyError as e:
+ logger.error(f"Could not find key in object {endpoint}. Error: {e}")
+ except KeyError as e:
+ logger.error(f"Keys not found in JSON object {data}. Error: {e}")
+ except TypeError as e:
+ logger.error(f"List not at the expected level in {data}. Error: {e}")
+
+
+
+class VesPnfRegistrationSSH(VesMessage):
+ def __init__(self, port: int, nc_user: str, nc_pass: str, append_port: bool = False):
+ super().__init__(append_port=append_port, port=port)
+
+ self.data["event"]["pnfRegistrationFields"] = {
+ "pnfRegistrationFieldsVersion": "2.1",
+ "lastServiceDate": "2021-03-26",
+ # "macAddress": "", #"@macAddress@",
+ "manufactureDate": "2021-01-16",
+ "modelNumber": "pynts",
+ # "oamV4IpAddress": "@oamIp@",
+ # "oamV6IpAddress": "@oamIpV6@", # not currently supported
+ # "serialNumber": "@vendor@-@unitType@-@oamIp@-pynts",
+ "softwareVersion": "2.3.5",
+ # "unitFamily": "@vendor@-@unitType@",
+ # "unitType": "@unitType@",
+ # "vendorName": "@vendor@",
+ "additionalFields": {
+ "oamPort": str(port),
+ "protocol": "SSH",
+ "username": nc_user,
+ "password": nc_pass,
+ "reconnectOnChangedSchema": "false",
+ "sleep-factor": "1.5",
+ "tcpOnly": "false",
+ "connectionTimeout": "20000",
+ "maxConnectionAttempts": "100",
+ "betweenAttemptsTimeout": "2000",
+ "keepaliveDelay": "120"
+ }
+ }
+
+ self.namespace = None
+ self.domain = "pnfRegistration"
+ self.priority = "Low"
+ self.event_type = "PyNTS_pnfRegistration"
+
+ def update(self) -> None:
+ super().update()
+
+ ves = Ves()
+ config = Config()
+
+ self.data["event"]["pnfRegistrationFields"]["macAddress"] = self.mac_address
+ self.data["event"]["pnfRegistrationFields"]["oamV4IpAddress"] = self.ipv4
+ # self.data["event"]["pnfRegistrationFields"]["oamV6IpAddress"] = self.ipv6 # checkAL
+ self.data["event"]["pnfRegistrationFields"]["serialNumber"] = ves.vendor + "-" + config.netconf_function_type + "-" + self.ipv4 + "-pynts"
+
+ self.data["event"]["pnfRegistrationFields"]["unitFamily"] = ves.vendor + "-" + config.netconf_function_type
+ self.data["event"]["pnfRegistrationFields"]["unitType"] = config.netconf_function_type
+ self.data["event"]["pnfRegistrationFields"]["vendorName"] = ves.vendor
+
+ # self.data["event"]["pnfRegistrationFields"]["additionalFields"]["username"] = config.netconf_username
+ # self.data["event"]["pnfRegistrationFields"]["additionalFields"]["password"] = config.netconf_password
+
+class VesPnfRegistrationTLS(VesMessage):
+ port: str
+
+ def __init__(self, name: str, port: int, append_port: bool = False):
+ super().__init__(append_port=append_port, port=port)
+
+ self.name = name
+ self.port = port
+
+ self.data["event"]["pnfRegistrationFields"] = {
+ "pnfRegistrationFieldsVersion": "2.1",
+ "lastServiceDate": "2021-03-26",
+ # "macAddress": "", #"@macAddress@",
+ "manufactureDate": "2021-01-16",
+ "modelNumber": "pynts",
+ # "oamV4IpAddress": "@oamIp@",
+ # "oamV6IpAddress": "@oamIpV6@", # not currently supported
+ # "serialNumber": "@vendor@-@unitType@-@oamIp@-pynts",
+ "softwareVersion": "2.3.5",
+ # "unitFamily": "@vendor@-@unitType@",
+ # "unitType": "@unitType@",
+ # "vendorName": "@vendor@",
+ "additionalFields": {
+ "oamPort": str(port),
+ "protocol": "TLS",
+ # "username": "username",
+ # "keyId": "password",
+ "reconnectOnChangedSchema": "false",
+ "sleep-factor": "1.5",
+ "tcpOnly": "false",
+ "connectionTimeout": "20000",
+ "maxConnectionAttempts": "100",
+ "betweenAttemptsTimeout": "2000",
+ "keepaliveDelay": "120"
+ }
+ }
+
+ self.namespace = None
+ self.domain = "pnfRegistration"
+ self.priority = "Low"
+ self.event_type = "PyNTS_pnfRegistration"
+
+ def update(self) -> None:
+ super().update()
+
+ ves = Ves()
+ config = Config()
+
+ self.data["event"]["pnfRegistrationFields"]["macAddress"] = self.mac_address
+ self.data["event"]["pnfRegistrationFields"]["oamV4IpAddress"] = self.ipv4
+ # self.data["event"]["pnfRegistrationFields"]["oamV6IpAddress"] = self.ipv6 # checkAL
+ self.data["event"]["pnfRegistrationFields"]["serialNumber"] = ves.vendor + "-" + config.netconf_function_type + "-" + self.ipv4 + "-pynts"
+
+ self.data["event"]["pnfRegistrationFields"]["unitFamily"] = ves.vendor + "-" + config.netconf_function_type
+ self.data["event"]["pnfRegistrationFields"]["unitType"] = config.netconf_function_type
+ self.data["event"]["pnfRegistrationFields"]["vendorName"] = ves.vendor
+
+ self.data["event"]["pnfRegistrationFields"]["additionalFields"]["username"] = config.netconf_username
+ self.data["event"]["pnfRegistrationFields"]["additionalFields"]["keyId"] = self.name
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from util.logging import get_pynts_logger
+import threading
+import json
+import re
+import os
+import subprocess
+from pathlib import Path
+from typing import Any, Optional
+from datetime import datetime, timedelta
+from typing import List
+from core.config import Config
+from core.ves import Ves
+from util.datetime import seconds_to_duration, datetime_utcnow
+from util.threading import stop_event, sa_sleep
+
+from performance_management.ves_fileready import VesFileReady
+
+logger = get_pynts_logger("performance-management")
+
+# Event to signal threads to stop
+pm_stop_event = threading.Event()
+
+PM_DATA_PATH = "/ftp"
+
+class PerformanceManagement:
+ _instance = None
+
+ config: Config
+
+ points: List[str]
+ points_id: dict
+ log_period: int
+ repetition_period: int
+
+ values: dict
+
+ template: str
+
+ disabled: bool = False
+ stopped: bool = True
+
+ pm_roll_command: list = ["find", PM_DATA_PATH, "-mindepth", "1", "-mmin", "+1440", "-delete"]
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance.init()
+
+ return cls._instance
+
+ def init(self):
+ self.config = Config()
+ self.ves = Ves()
+
+ # check pm data path exists
+ if not os.path.exists(PM_DATA_PATH):
+ logger.warning(f"data path '{PM_DATA_PATH}' does not exist, disabling performance-management")
+ self.disabled = True
+ return
+
+ # check vsftpd users
+ vsftpd_userlist = "/etc/vsftpd.userlist"
+ if not os.path.exists(vsftpd_userlist):
+ logger.warning(f"vsftpd userlist conf file '{vsftpd_userlist}' does not exist, disabling performance-management")
+ self.disabled = True
+ return
+
+ # add current user
+ with open(vsftpd_userlist, 'w') as file:
+ user = self.config.netconf_username
+ file.write(f"{user}\n")
+
+ # apply vsftpd changes
+ os.system("killall -9 vsftpd")
+
+ # read template from performance-management/template.xml
+ template_path = '/data/performance-management/template.xml'
+ if Path(template_path).exists():
+ with open(template_path, 'r') as file:
+ self.template = file.read()
+ else:
+ logger.warning("template file not found, disabling performance-management")
+ self.disabled = True
+ return
+
+ def load_data(self, config=None):
+ if config is None:
+ # read config from performance-management/index.json
+ pm_data_path = '/data/performance-management/index.json'
+ if Path(pm_data_path).exists():
+ # Read and parse the JSON file
+ with open(pm_data_path, 'r') as file:
+ config = json.load(file)
+
+ self.log_period = config["config"]["log-period"]
+ self.repetition_period = config["config"]["repetition-period"]
+ self.points = config["config"]["points"]
+
+ self.values = config["values"]
+ else:
+ raise Exception("config file not found, stopping performance-management")
+
+ # checkAL do all checks
+
+ # check repetition and log period
+ if self.repetition_period % 60 != 0:
+ raise Exception(f"repetition-period {self.repetition_period} must have full minutes")
+
+ if self.repetition_period % self.log_period != 0:
+ raise Exception(f"repetition-period {self.repetition_period} must be a multiple of log-period {self.log_period}")
+
+ self.pm_roll_command[5] = "+" + str(int(self.repetition_period / 60))
+
+ # check that values have all the points defined
+ for value in self.values:
+ for point in self.points:
+ if point not in value:
+ raise Exception(f"{point} not found within {value} values; stopping performance-management")
+
+ self.points_id = {}
+ counter = 1
+ for point in self.points:
+ self.points_id[point] = str(counter)
+ counter = counter + 1
+
+ def start(self, config=None):
+ if self.disabled:
+ return
+
+ if self.stopped is False:
+ return
+
+ try:
+ self.load_data(config)
+ except Exception as e:
+ logger.error(e)
+
+ # clear stopped
+ self.stopped = False
+ pm_stop_event.clear()
+
+ # start performance management thread
+ logger.info("starting performance management thread...")
+ thread = threading.Thread(target=self.performance_management_task)
+ thread.start()
+
+
+ def cleanup_reports(self):
+ subprocess.run(self.pm_roll_command)
+ logger.info(f"running: {self.pm_roll_command}")
+
+
+ def generate_report(self, values:list, start_time:datetime, end_time:datetime|None=None) -> dict|None:
+ def content() -> str:
+ template = self.template
+
+ difference = end_time - start_time
+ suspect = False
+ if difference.total_seconds() < self.log_period:
+ suspect = True
+ logger.info(f"suspect true because {difference.total_seconds()} < {self.log_period}")
+
+ suspect_text = ""
+ if suspect:
+ suspect_text = "<suspect>true</suspect>"
+
+ template = template.replace("@start-time@", start_time.strftime('%Y-%m-%dT%H:%M:%S') + "+00:00")
+ template = template.replace("@end-time@",end_time.strftime('%Y-%m-%dT%H:%M:%S') + "+00:00")
+ template = template.replace("@suspect@", suspect_text)
+
+ log_period = seconds_to_duration(self.log_period)
+ rep_period = seconds_to_duration(self.repetition_period)
+
+ template = template.replace("@log-period@", log_period)
+ template = template.replace("@rep-period@", rep_period)
+
+ start_marker = "@point-start@"
+ stop_marker = "@point-end@"
+ pattern = re.escape(start_marker) + r'(.*?)' + re.escape(stop_marker)
+ match = re.search(pattern, template, flags=re.DOTALL)
+ point_iter = ""
+ if match:
+ point_iter = match.group(1)
+
+ replacement = ""
+ for point_name in self.points:
+ new_point = point_iter
+ new_point = new_point.replace("@point-id@", self.points_id[point_name])
+ new_point = new_point.replace("@point-name@", point_name)
+ replacement += new_point + "\n"
+ template = re.sub(pattern, replacement, template, flags=re.DOTALL)
+
+
+ start_marker = "@value-start@"
+ stop_marker = "@value-end@"
+ pattern = re.escape(start_marker) + r'(.*?)' + re.escape(stop_marker)
+ match = re.search(pattern, template, flags=re.DOTALL)
+ point_iter = ""
+ if match:
+ point_iter = match.group(1)
+
+ replacement = ""
+ for point_name in self.points:
+ new_point = point_iter
+ new_point = new_point.replace("@point-id@", self.points_id[point_name])
+ new_point = new_point.replace("@value@", str(values[point_name]))
+ replacement += new_point + "\n"
+ template = re.sub(pattern, replacement, template, flags=re.DOTALL)
+
+ # other vars and functions
+ template = template.replace("@hostname@", self.config.hostname)
+
+ return template
+
+ if end_time is None:
+ end_time = datetime_utcnow().replace(microsecond=0)
+
+ filename = "A" + start_time.strftime('%Y%m%d.%H%M') + "+0000-" + end_time.strftime('%H%M') + f"+0000_1_{self.config.hostname}.xml"
+ filepath = PM_DATA_PATH + "/" + filename
+ filesize = 0
+ with open(filepath, 'w') as file:
+ filesize = file.write(content())
+
+ expiration = datetime_utcnow() + timedelta(seconds=self.repetition_period)
+
+ return {
+ "location": filepath,
+ "size": filesize,
+ "expiry": expiration
+ }
+
+ def performance_management_task(self):
+ start_time = datetime_utcnow()
+ current_value_index = -1
+ while not stop_event.is_set() and not pm_stop_event.is_set():
+ now_ts = int(datetime_utcnow().timestamp())
+
+ if now_ts % self.log_period == 0:
+ current_value_index = current_value_index + 1
+ if current_value_index >= len(self.values):
+ current_value_index = 0
+
+ # generate report
+ report = self.generate_report(self.values[current_value_index], start_time)
+ start_time = datetime_utcnow().replace(microsecond=0)
+ self.cleanup_reports()
+
+ # send VES
+ file_ready = VesFileReady(report['location'], report['size'], report['expiry'])
+ self.ves.execute(file_ready)
+
+ sa_sleep(1)
+
+ sa_sleep(0.1)
+
+ logger.info("thread finished")
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from datetime import datetime
+
+from core.config import Config
+from core.ves import VesMessage
+from util.datetime import yang_timestamp_with_miliseconds
+
+ves_file_ready_notification_id = 0
+
+class VesFileReady(VesMessage):
+ file_location: str
+
+ def __init__(self, file_location: str, file_size: int, expiry: datetime):
+ super().__init__()
+
+ self.file_location = file_location
+
+ self.data["event"]["stndDefinedFields"] = {
+ "schemaReference": "https://forge.3gpp.org/rep/sa5/MnS/blob/Rel-18/OpenAPI/TS28532_FileDataReportingMnS.yaml#components/schemas/NotifyFileReady",
+ "stndDefinedFieldsVersion": "1.0",
+ "data": {
+ "href": "href1",
+ # "notificationId": 0, # @notification-id@,
+ "notificationType": "notifyFileReady",
+ # "eventTime": "@timestampISO3milisec@",
+ # "systemDN": "ManagedElement=@node-id@",
+ "fileInfoList": [{
+ # "fileLocation": "sftp://@username@:@password@@@oamIp@:@port@@fileLocation@",
+ "fileSize": file_size, # @fileSize@,
+ # "fileReadyTime": "@timestampISO3milisec@", # checkAL
+ "fileExpirationTime": yang_timestamp_with_miliseconds(expiry),
+ "fileCompression": "no",
+ "fileFormat": "xml",
+ "fileDataType": "Performance"
+ }],
+ "additionalText": "Have fun!"
+ }
+ }
+
+ self.namespace = "3GPP-PerformanceAssurance"
+ self.domain = "stndDefined"
+ self.priority = "Low"
+ self.event_type = "PyNTS_FileReady"
+
+ def update(self) -> None:
+ super().update()
+
+ config: Config = Config()
+
+ global ves_file_ready_notification_id
+
+ ves_file_ready_notification_id = ves_file_ready_notification_id + 1
+ self.data["event"]["stndDefinedFields"]["data"]["notificationId"] = ves_file_ready_notification_id
+ self.data["event"]["stndDefinedFields"]["data"]["eventTime"] = self.timestampISO3milisec
+ self.data["event"]["stndDefinedFields"]["data"]["systemDN"] = "ManagedElement=" + self.hostname
+
+ self.data["event"]["stndDefinedFields"]["data"]["fileInfoList"][0]["fileLocation"] = f"sftp://{config.netconf_username}:{config.netconf_password}@{self.ipv4}:{config.sftp_listen_port}{self.file_location}"
+ self.data["event"]["stndDefinedFields"]["data"]["fileInfoList"][0]["fileReadyTime"] = self.timestampISO3milisec
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+# This template is a low-dependency template.
+
+StrEnum
+cryptography
+requests
+schedule
+dateutils
+falcon
+uvicorn
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import datetime
+from util.logging import get_pynts_logger
+from util.docker import get_hostname, get_container_ip
+import ipaddress
+import os
+
+from cryptography import x509
+from cryptography.hazmat.primitives import hashes
+from cryptography.hazmat.primitives import serialization as crypto_serialization
+from cryptography.hazmat.primitives.asymmetric import rsa
+from cryptography.hazmat.backends import default_backend as crypto_default_backend
+from cryptography.x509.oid import NameOID
+
+logger = get_pynts_logger("crypto")
+
+CERTIFICATE_VALIDITY_DAYS = 3650
+
+PRIVATE_KEY_PATH="/home/oranuser/.ssh/private_key.pem"
+PUBLIC_KEY_PATH="/home/oranuser/.ssh/public_key.pem"
+ODU_CERTIFICATE_PATH="/home/oranuser/.ssh/odu_certificate.pem"
+SMO_CERTIFICATE_PATH="/home/oranuser/.ssh/smo_certificate.pem"
+
+# CA_PRIVATE_KEY_PATH="/home/oranuser/.ssh/ca.key"
+# CA_CERT_PATH="/home/oranuser/.ssh/ca.pem"
+
+ROOT_ODU_CA_PRIVATE_KEY_PATH="/home/oranuser/.ssh/ODU_rootCA.key"
+ROOT_ODU_CA_CERT_PATH="/home/oranuser/.ssh/ODU_rootCA.crt"
+
+ROOT_SMO_CA_PRIVATE_KEY_PATH="/home/oranuser/.ssh/SMO_rootCA.key"
+ROOT_SMO_CA_CERT_PATH="/home/oranuser/.ssh/SMO_rootCA.crt"
+
+"""
+CryptoUtils
+Singleton
+----
+handles keys and certificates
+"""
+class CryptoUtils():
+ _instance = None
+
+ private_key: bytes
+ private_key_rsa: bytes
+ public_key_ssh: bytes
+ public_key_pem: bytes
+ odu_certificate: bytes
+ smo_certificate: bytes
+
+ root_odu_ca_private_key: bytes
+ root_odu_ca_cert: bytes
+ root_odu_ca_cert_decoded: str
+
+ root_smo_ca_private_key: bytes
+ root_smo_ca_cert: bytes
+ root_smo_ca_cert_decoded: str
+
+ # ca_private_key: bytes
+ # ca_cert: bytes
+ # ca_cert_decoded: str
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ logger.debug("CryptoUtils NetconfServer object")
+ cls._instance.initialize()
+
+ return cls._instance
+
+ def initialize(self) -> None:
+ self.load_ca_keys_and_certs()
+ self.generate_or_load_keys()
+ self.generate_certificate(self.private_key_rsa, is_smo=False)
+ self.generate_certificate(self.private_key_rsa, is_smo=True)
+ with open(ODU_CERTIFICATE_PATH, 'wb') as f:
+ f.write(self.odu_certificate)
+ with open(SMO_CERTIFICATE_PATH, 'wb') as f:
+ f.write(self.smo_certificate)
+
+ def load_ca_keys_and_certs(self) -> None:
+ # Load the CA's private key
+ # with open(CA_PRIVATE_KEY_PATH, "rb") as key_file:
+ # self.ca_private_key = crypto_serialization.load_pem_private_key(
+ # key_file.read(),
+ # password=None, # or your password here
+ # backend=crypto_default_backend()
+ # )
+
+ # # Load the CA's certificate
+ # with open(CA_CERT_PATH, "rb") as cert_file:
+ # self.ca_cert = x509.load_pem_x509_certificate(
+ # cert_file.read(),
+ # crypto_default_backend()
+ # )
+ # self.ca_cert_decoded = self.ca_cert.public_bytes(crypto_serialization.Encoding.PEM)
+
+ # Load the Root ODU CA's private key
+ with open(ROOT_ODU_CA_PRIVATE_KEY_PATH, "rb") as key_file:
+ self.root_odu_ca_private_key = crypto_serialization.load_pem_private_key(
+ key_file.read(),
+ password=None, # or your password here
+ backend=crypto_default_backend()
+ )
+
+ # Load the Root ODU CA's certificate
+ with open(ROOT_ODU_CA_CERT_PATH, "rb") as cert_file:
+ self.root_odu_ca_cert = x509.load_pem_x509_certificate(
+ cert_file.read(),
+ crypto_default_backend()
+ )
+ self.root_odu_ca_cert_decoded = self.root_odu_ca_cert.public_bytes(crypto_serialization.Encoding.PEM)
+
+ # Load the Root SMO CA's private key
+ with open(ROOT_SMO_CA_PRIVATE_KEY_PATH, "rb") as key_file:
+ self.root_smo_ca_private_key = crypto_serialization.load_pem_private_key(
+ key_file.read(),
+ password=None, # or your password here
+ backend=crypto_default_backend()
+ )
+
+ # Load the Root SMO CA's certificate
+ with open(ROOT_SMO_CA_CERT_PATH, "rb") as cert_file:
+ self.root_smo_ca_cert = x509.load_pem_x509_certificate(
+ cert_file.read(),
+ crypto_default_backend()
+ )
+ self.root_smo_ca_cert_decoded = self.root_smo_ca_cert.public_bytes(crypto_serialization.Encoding.PEM)
+
+ def generate_or_load_keys(self) -> None:
+
+ if os.path.exists(PRIVATE_KEY_PATH) and os.path.exists(PUBLIC_KEY_PATH):
+ logger.info("Loading keys and certs, as they are already existing...")
+ with open(PRIVATE_KEY_PATH, 'rb') as f:
+ private_key = crypto_serialization.load_pem_private_key(
+ f.read(),
+ password=None,
+ backend=crypto_default_backend()
+ )
+
+ self.private_key_rsa = private_key
+
+ self.private_key = private_key.private_bytes(
+ crypto_serialization.Encoding.PEM,
+ crypto_serialization.PrivateFormat.PKCS8,
+ crypto_serialization.NoEncryption()
+ )
+
+ with open(PUBLIC_KEY_PATH, 'rb') as f:
+ public_key = crypto_serialization.load_pem_public_key(
+ f.read(),
+ backend=crypto_default_backend()
+ )
+
+ self.public_key_pem = public_key.public_bytes(
+ encoding=crypto_serialization.Encoding.PEM,
+ format=crypto_serialization.PublicFormat.SubjectPublicKeyInfo
+ )
+
+ self.public_key_ssh = public_key.public_bytes(
+ encoding=crypto_serialization.Encoding.OpenSSH,
+ format=crypto_serialization.PublicFormat.OpenSSH
+ )
+
+ # with open(SMO_CERTIFICATE_PATH if is_smo else ODU_CERTIFICATE_PATH, 'rb') as f:
+ # certificate = x509.load_pem_x509_certificate(f.read(), crypto_default_backend())
+ # if is_smo:
+ # self.smo_certificate = certificate.public_bytes(crypto_serialization.Encoding.PEM)
+ # else:
+ # self.odu_certificate = certificate.public_bytes(crypto_serialization.Encoding.PEM)
+ else:
+ logger.info("Generating new keys and certs, as they are not existing...")
+ key = rsa.generate_private_key(backend=crypto_default_backend(), public_exponent=65537, key_size=2048)
+
+ self.private_key_rsa = key
+
+ self.private_key = key.private_bytes(
+ crypto_serialization.Encoding.PEM,
+ crypto_serialization.PrivateFormat.PKCS8,
+ crypto_serialization.NoEncryption()
+ )
+ with open(PRIVATE_KEY_PATH, 'wb') as f:
+ f.write(self.private_key)
+
+ self.public_key_pem = key.public_key().public_bytes(crypto_serialization.Encoding.PEM, crypto_serialization.PublicFormat.SubjectPublicKeyInfo)
+ with open(PUBLIC_KEY_PATH, 'wb') as f:
+ f.write(self.public_key_pem)
+
+ self.public_key_ssh = key.public_key().public_bytes(crypto_serialization.Encoding.OpenSSH, crypto_serialization.PublicFormat.OpenSSH)
+
+ def generate_certificate(self, key: bytes, is_smo: bool = False) -> None:
+ csr = x509.CertificateSigningRequestBuilder().subject_name(x509.Name([
+ # Provide various details about who we are.
+ x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"),
+ x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"NJ"),
+ x509.NameAttribute(NameOID.LOCALITY_NAME, u"New Jersey"),
+ x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Melacon"),
+ x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"5G"),
+ x509.NameAttribute(NameOID.COMMON_NAME, u"SMO") if is_smo else x509.NameAttribute(NameOID.COMMON_NAME, u"hybridOdu"),
+ ])).sign(key, hashes.SHA256(), crypto_default_backend())
+
+
+ # Generate the certificate
+ one_day = datetime.timedelta(1, 0, 0)
+ certificate = x509.CertificateBuilder().subject_name(
+ csr.subject
+ ).issuer_name(
+ self.root_smo_ca_cert.subject if is_smo else self.root_odu_ca_cert.subject
+ ).public_key(
+ csr.public_key()
+ ).serial_number(
+ x509.random_serial_number()
+ ).not_valid_before(
+ datetime.datetime.today() - one_day
+ ).not_valid_after(
+ # Our certificate will be valid for CERTIFICATE_VALIDITY_DAYS days
+ datetime.datetime.today() + datetime.timedelta(days=CERTIFICATE_VALIDITY_DAYS)
+ ).add_extension(
+ x509.AuthorityKeyIdentifier.from_issuer_public_key(self.root_smo_ca_private_key.public_key() if is_smo else self.root_odu_ca_private_key.public_key()),
+ critical=False,
+ ).add_extension(
+ x509.SubjectKeyIdentifier.from_public_key(csr.public_key()),
+ critical=False,
+ ).add_extension(
+ x509.SubjectAlternativeName([
+ # Describe what sites we want this certificate for.
+ x509.RFC822Name("client.smo" if is_smo else "client.hybridOdu"),
+ x509.RFC822Name(("client.smo@"+get_hostname()) if is_smo else ("client.hybridOdu@"+get_hostname())),
+ x509.DNSName("client.smo" if is_smo else "client.hybridOdu"),
+ x509.DNSName(("client.smo@"+get_hostname()) if is_smo else ("client.hybridOdu@"+get_hostname())),
+ x509.IPAddress(ipaddress.ip_address(get_container_ip()))
+ ]),
+ critical=False,
+ ).sign(self.root_smo_ca_private_key if is_smo else self.root_odu_ca_private_key, hashes.SHA256(), crypto_default_backend())
+
+ # Serialize the certificate to PEM
+ if is_smo:
+ self.smo_certificate = certificate.public_bytes(crypto_serialization.Encoding.PEM)
+ else:
+ self.odu_certificate = certificate.public_bytes(crypto_serialization.Encoding.PEM)
+
+ def get_public_key_ssh_format(self) -> str:
+ ''' Method returning just the actual data of a SSH key, removing the extra ssh-rsa or whatever encoding algorithm
+ '''
+ return self.public_key_ssh.decode("utf-8").split(" ")[1]
+
+ def get_private_key_base64_encoding_no_markers(self) -> str:
+ ''' Method for getting just the base64 encoding of the private key, removing the ---- BEGIN... and ---- END lines.
+ '''
+ crypto_string = self.private_key.decode("utf-8")
+ return "\n".join(crypto_string.split("\n")[1:-2])
+
+ def get_public_key_base64_encoding_no_markers(self) -> str:
+ ''' Method for getting just the base64 encoding of the private key, removing the ---- BEGIN... and ---- END lines.
+ '''
+ crypto_string = self.public_key_pem.decode("utf-8")
+ return "\n".join(crypto_string.split("\n")[1:-2])
+
+ def get_certificate_base64_encoding_no_markers(self, is_smo = False) -> str:
+ ''' Method for getting just the base64 encoding of the private key, removing the ---- BEGIN... and ---- END lines.
+ '''
+ crypto_string = self.smo_certificate.decode("utf-8") if is_smo else self.odu_certificate.decode("utf-8")
+ return "\n".join(crypto_string.split("\n")[1:-2])
+
+ # def get_ca_certificate_base64_encoding_no_markers(self) -> str:
+ # ''' Method for getting just the base64 encoding of the private key, removing the ---- BEGIN... and ---- END lines.
+ # '''
+ # crypto_string = self.ca_cert_decoded.decode("utf-8")
+ # return "\n".join(crypto_string.split("\n")[1:-2])
+
+ def get_ca_certificate_base64_encoding_no_markers(self, is_smo) -> str:
+ ''' Method for getting just the base64 encoding of the private key, removing the ---- BEGIN... and ---- END lines.
+ '''
+ crypto_string = self.root_smo_ca_cert_decoded.decode("utf-8") if is_smo else self.root_odu_ca_cert_decoded.decode("utf-8")
+ return "\n".join(crypto_string.split("\n")[1:-2])
+
+ @staticmethod
+ def get_certificate_fingerprint(cert: bytes) -> str:
+ ''' Method for getting the fingerprint of a certificate, prepended by a byte representing the algorithm that was used for encoding
+ '''
+ # Compute the fingerprint using SHA-1
+ fingerprint_bytes = cert.fingerprint(hashes.SHA1())
+
+ # Prepend the byte 0x02 to the fingerprint bytes
+ # 0x02 is SHA1 encoding, according to https://datatracker.ietf.org/doc/html/rfc5246#section-7.4.1.4.1
+ fingerprint_bytes = b'\x02' + fingerprint_bytes
+
+ # Convert the fingerprint to a more readable hex format
+ fingerprint_hex = ':'.join([f"{byte:02X}" for byte in fingerprint_bytes])
+ return fingerprint_hex
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+from datetime import datetime, timezone
+from dateutil import parser
+
+def ensure_aware(dt: datetime) -> datetime:
+ if dt.tzinfo is None:
+ # Convert naive datetime to aware datetime with UTC offset
+ return dt.replace(tzinfo=timezone.utc)
+ return dt
+
+def yang_datetime_to_datetime(yang: str) -> datetime:
+ return parser.parse(yang)
+
+def datetime_to_yang_datetime(dt: datetime) -> str:
+ r = dt.replace(microsecond=0).isoformat()
+ if dt.tzinfo is None:
+ r = r + "Z"
+ return r
+
+def datetime_utcnow() -> datetime:
+ return datetime.utcnow()
+
+def timestamp_in_microseconds(now: datetime|None=None) -> int:
+ """Returns the current timestamp in microseconds."""
+ if now is None:
+ now = datetime_utcnow() # Use UTC time
+ timestamp_in_microseconds = int(now.timestamp() * 1_000_000)
+ return timestamp_in_microseconds
+
+def yang_timestamp_with_miliseconds(now: datetime|None=None) -> str:
+ """Returns the current timestamp in the NETCONF format with 3 digits for milliseconds."""
+ if now is None:
+ now = datetime_utcnow() # Use UTC time
+ netconf_timestamp = now.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
+ return netconf_timestamp
+
+def seconds_to_duration(seconds: int) -> str:
+ """Converts a given number of seconds into an ISO 8601 duration string."""
+ days, seconds = divmod(seconds, 86400)
+ hours, seconds = divmod(seconds, 3600)
+ minutes, seconds = divmod(seconds, 60)
+
+ duration = 'P'
+
+ if days > 0:
+ duration += f'{days}D'
+
+ if hours > 0 or minutes > 0 or seconds > 0:
+ duration += 'T'
+ if hours > 0:
+ duration += f'{hours}H'
+ if minutes > 0:
+ duration += f'{minutes}M'
+ if seconds > 0:
+ duration += f'{seconds}S'
+
+ return duration
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import os
+import fcntl
+import re
+import socket
+import struct
+
+def get_network_interface_name() -> str:
+ return os.environ.get("NETWORK_INTERFACE", "eth0")
+
+def get_hostname() -> str:
+ return os.environ.get("HOSTNAME", get_container_ip())
+
+def get_container_ip() -> str:
+ ifname = get_network_interface_name()
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ info = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', bytes(ifname, 'utf-8')[:15]))
+ return socket.inet_ntoa(info[20:24])
+
+def get_container_mac_address() -> str:
+ ifname = get_network_interface_name()
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(ifname, 'utf-8')[:15]))
+ return ':'.join('%02x' % b for b in info[18:24])
+
+
+def is_valid_ip(ip):
+ # Regex to check if it's a valid IPv4 address
+ ipv4_regex = r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$"
+ # Regex to check if it's a valid IPv6 address
+ ipv6_regex = r"^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|(([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}))|:((:[0-9a-fA-F]{1,4}){1,7}|:))(\%[0-9a-zA-Z]{1,})?)$"
+
+ return re.match(ipv4_regex, ip) is not None or re.match(ipv6_regex, ip) is not None
+
+
+def get_ip_from_env(env_var_name: str, ipv6_enabled: bool = False, default_value: str = "172.60.0.71"):
+ value = os.getenv(env_var_name)
+
+ if value is None:
+ return default_value # TODO need to log error
+
+ if is_valid_ip(value):
+ return value
+ else:
+ try:
+ # Get all the address information associated with the FQDN
+ addr_info = socket.getaddrinfo(value, None)
+ # Filter for the first IPv6 or IPv4 address
+ for result in addr_info:
+ if result[0] == (socket.AF_INET6 if ipv6_enabled else socket.AF_INET):
+ return result[4][0]
+ except socket.gaierror:
+ return default_value # TODO need to log error
+
+
+
+# def get_container_ip() -> str:
+# try:
+# ip_address = subprocess.check_output(["hostname", "-i"]).decode().strip()
+# except subprocess.CalledProcessError as e:
+# ip_address = "Unable to determine IP address: " + str(e)
+# return ip_address
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import logging
+from logging import Logger
+
+pynts_log_level = logging.WARNING
+logger_list = []
+
+def set_pynts_log_level(level) -> None:
+ global pynts_log_level, logger_list
+
+ if level == "DEBUG":
+ pynts_log_level = logging.DEBUG
+ elif level == "INFO":
+ pynts_log_level = logging.INFO
+ elif level == "WARNING":
+ pynts_log_level = logging.WARNING
+ elif level == "ERROR":
+ pynts_log_level = logging.ERROR
+ elif level == "CRITICAL":
+ pynts_log_level = logging.CRITICAL
+ else:
+ raise Exception(f"Invalid log level {level}")
+
+ for logger in logger_list:
+ logger.setLevel(pynts_log_level)
+ for handler in logger.handlers:
+ handler.setLevel(pynts_log_level)
+
+def get_pynts_log_level():
+ global pynts_log_level
+ return pynts_log_level
+
+class CustomFormatter(logging.Formatter):
+ grey = "\x1b[38;20m"
+ yellow = "\x1b[33;20m"
+ red = "\x1b[31;20m"
+ bold_red = "\x1b[31;1m"
+ reset = "\x1b[0m"
+
+ format = "[%(asctime)s.%(msecs)03d] [%(levelname)s] %(name)s: %(message)s"
+ # format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
+
+ FORMATS = {
+ logging.DEBUG: grey + format + reset,
+ logging.INFO: grey + format + reset,
+ logging.WARNING: yellow + format + reset,
+ logging.ERROR: red + format + reset,
+ logging.CRITICAL: bold_red + format + reset
+ }
+
+ def format(self, record):
+ log_fmt = self.FORMATS.get(record.levelno)
+ formatter = logging.Formatter(log_fmt)
+ formatter.datefmt = "%Y-%m-%dT%H:%M:%S"
+ return formatter.format(record)
+
+def get_pynts_logger(name: str) -> Logger:
+ global logger_list
+ logger = logging.getLogger(name)
+ logger_list.append(logger)
+ logger.setLevel(pynts_log_level)
+
+ if logger.hasHandlers():
+ logger.handlers.clear()
+
+ # create console handler with a higher log level
+ ch = logging.StreamHandler()
+ ch.setLevel(pynts_log_level)
+ ch.setFormatter(CustomFormatter())
+
+ logger.addHandler(ch)
+ return logger
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import signal
+import threading
+import time
+
+# Event to signal threads to stop
+stop_event = threading.Event()
+
+def signal_handler(sig, frame):
+ print('SIGINT received; stopping...')
+ stop_event.set()
+
+ from core.rest import Rest
+ rest = Rest()
+ rest.stop_server()
+
+def sa_sleep(interval, extra_event=None):
+ """Signal aware sleep in small increments to allow checking for stop_event."""
+ end_time = time.time() + interval
+ while time.time() < end_time:
+ if extra_event is not None:
+ if stop_event.is_set() or extra_event.is_set():
+ return
+ else:
+ if stop_event.is_set():
+ return
+
+ time.sleep(min(1, end_time - time.time()))
+
+# Set up the signal handler
+signal.signal(signal.SIGINT, signal_handler)
--- /dev/null
+# PyNTS - Environment Variables
+
+Below all the available environment variables will be described
+
+## NETWORK_FUNCTION_TYPE
+- should be automatically set by the Dockerfile to a specific network function that the image implements
+
+
+## NETCONF_USERNAME
+- type string
+
+## NETCONF_PASSWORD
+- type string
+
+## SDNR_RESTCONF_URL
+- type string
+- URL for the RESTCONF interface of the SDN controller
+- example: http://controller.dcn.smo.o-ran-sc.org
+
+## SDNR_USERNAME
+- type string
+- SDNR credentials
+
+## SDNR_PASSWORD
+- type string
+- SDNR credentials
+
+## VES_URL
+- type string
+- URL of VES collector
+- example: https://10.20.35.128:8443/eventListener/v7
+
+## VES_USERNAME
+- type string
+- VES collector credentials
+
+## VES_PASSWORD
+- type string
+- VES collector credentials
+
+## NETWORK_INTERFACE
+- type string
+- the name of the network interface which can be used by the simulator. Is only relevant when docker image is ran in network_mode="host" (in this case, it needs to point to an interface name from the host system).
+
+## O_DU_CALLHOME_PORT
+- type string
+- the port number where a simulated O-DU listens for call-home connections. Is only relevant when docker image is ran in network_mode="host". Default port is 4335
\ No newline at end of file
--- /dev/null
+# Fault Management
+
+Fault management consist of alarms, mechanisms to trigger alarms and alarm lists (whether active or not).
+
+
+## Overall architecture
+
+Independent on the used flavour, fault management works as follows:
+1. any datastore data that is being loaded from the `/data` folder will be used by the the fault management module; all the loaded alarms will be further maintained by the fault-management feature.
+2. `/data/fault-management/index.json` will then define a step-by-step recipe for triggering alarms and for maintaing alarms
+3. unless commended otherwise, this step-by-step list will be repeated time and time again as long as the simulator is running
+
+### fault-management/index.json
+
+This file configures the fault generation. It contains two objects:
+- *config* used to configure the fault-management feature
+- *alarms* which contain the actual alarm steps. It is a *list* of steps that the fault-management system needs to play. Each step is defined as an object in the JSON list, and contains one or more instructions.
+
+For *config* you can set the following parameters:
+- *loop* - boolean set to true/false whether to loop the steps
+
+In the example below, 2 steps are defined:
+1. first step adds a time delay of 2 *seconds*
+2. second step defined an alarm, as well as another time delay
+```
+{
+ "config": {
+ "loop": false
+ },
+ "alarms": [
+ {
+ "delay": 2
+ },
+ {
+ "alarm": {
+ // alarm id data
+ // alarm data
+ },
+ "delay": 2
+ }
+ ]
+}
+```
+
+The instructions currently implemented in the `fault-management` system are:
+- *alarm* - implements an alarm; the content of the alarm is dictated by the current flavour notification schema
+- *delay* - implements a time delay, in *seconds*
+
+If both an *alarm* and a *delay* are defined within the same step, the alarm is executed first, then the delay.
+
+The sum of all the delays defined by the step-list must be non-zero, otherwise the simulation will be stopeed with an exception.
+
+### Internal alarm list
+The internal alarm list is the actual data provider for the "alarm-list", "active alarm list" or any other form of alarm list depending on the current flavor.
+
+When `/data/fault-management/index.json` step list is loaded, the fault-management internal alarm list can be either empty or can have some alarms (which were loaded as module data).
+
+While executing "alarm" steps from the step list, there are 2 cases:
+1. The alarm that is being executed already exists, which means that the fault-management system will **UPDATE** its state.
+2. The alarm that is being executed does not exist, which means that the fault-management system will **CREATE** it within its internal alarm list, and from that time on, the alarm will exist.
+
+
+### Examples
+
+#### Alarm-list empty, raising and clearing alarm every minute
+index.json
+```
+{
+ "config": {
+ "loop": false
+ },
+ "alarms": [
+ {
+ "alarm": {
+ // alarm1
+
+ // raising alarm
+ },
+ "delay": 30
+ },
+ {
+ "alarm": {
+ // alarm1
+
+ // clearing alarm
+ },
+ "delay": 30
+ }
+ ]
+}
+```
+
+#### Alarm-list contains alarm1, raising alarm1 each 10 seconds, and clearing it after 1 second
+flavour-module-data.json
+```
+{
+ ...active-alarm: {
+ // data for alarm1
+ // including the fact that is **SET**
+ }
+}
+```
+
+index.json
+```
+{
+ "config": {
+ "loop": false
+ },
+ "alarms": [
+ {
+ "delay": 1
+ }
+ {
+ "alarm": {
+ // alarm1
+
+ // clearing alarm
+ },
+ "delay": 9
+ },
+ {
+ "alarm": {
+ // alarm1
+
+ // raising alarm
+ },
+ }
+ ]
+}
+```
+#### Raising and clearing 10 alarms at once
+index.json
+```
+{
+ "config": {
+ "loop": false
+ },
+ "alarms": [
+ {
+ "alarm": {
+ // alarm1
+
+ // raising alarm
+ }
+ },
+ {
+ "alarm": {
+ // alarm2
+
+ // raising alarm
+ }
+ },
+ .....
+ {
+ "alarm": {
+ // alarm10
+
+ // raising alarm
+ }
+ },
+ {
+ "delay": 10
+ },
+ {
+ "alarm": {
+ // alarm1
+
+ // clearing alarm
+ }
+ },
+ {
+ "alarm": {
+ // alarm2
+
+ // clearing alarm
+ }
+ },
+ .....
+ {
+ "alarm": {
+ // alarm10
+
+ // clearing alarm
+ }
+ },
+ {
+ "delay": 10
+ }
+ ]
+}
+```
+
+## Initial Alarm Time Stamps
+
+In the `/data/ietf-alarms-operational.json` file, the initial alarms may have a triplet of timestamps set:
+
+```
+"time-created": "2024-05-11T11:22:30Z",
+"last-raised": "2024-05-11T11:22:33Z",
+"last-changed": "2024-05-11T11:22:33Z",
+```
+If these timestamps are set, the fault-management system will use them as the initial timestamps for the alarms that are being raised.
+If these timestamps are not set, the fault-management system will use the current time as the initial timestamps for the alarms that are being raised.
+
+Currently, the field `last-changed` is required to be set, otherwise the initial alarm will not be raised.
+
+## Flavours
+
+The flavour is automatically detected based on the currently installed schema files:
+- if more than one flavour is present, the simulator will end with an exception
+- if no flavour is present, the fault-management feature will be turned off
+- otherwise, the fault-management system will run using the currently installed flavour
+
+The current fault-management flavours implemented and recognized by the simulator are:
+
+### ietf-alarms
+
+checkAL add pyang data on the schema that is being taken into account
+
+### o-ran-fm
+
+Not yet implemented.
+
+## REST API
+
+Fault-Management module adds endpoints to PyNTS REST API:
+- /fault-management
+ - method: GET
+ - returns current status of the fault-management module
+
+- /fault-management/counters
+ - method GET
+ - returns current alarm counters
+
+- /fault-management/start
+ - method POST
+ - starts fault-management alarm steps
+ - does not work if FM is already started
+ - data should be a JSON with the same format as index.json
+ - returns a message and current status of the fault-management system
+
+- /fault-management/stop
+ - method POST
+ - stops fault-management alarm steps
+ - does not work if FM is already stopped
+ - no data is needed
+ - returns a message and current status of the fault-management system
+
+- /fault-management/counters/clear
+ - method POST
+ - clears alarm counters
+ - no data is needed
+ - returns current alarm counters (with 0 value)
--- /dev/null
+# Performance Management
+
+Performance management is a feature to report performance data.
+
+## Overall architecture
+
+Performance data is being generated using a predefined `template`.
+
+Mode of operation:
+- the data is being written into the `/ftp` folder (Docker-side only)
+ - files are written at time intervals divisible by the `log-period`: for example, if the log period is 15 minutes, the files will be written at :00, :15, :30 and :45 respectively
+ - filename is "A%Y%m%d.%H%M+0000-%H%M+0000_1_%hostname.xml where the time marks the start and end time
+ - a VES FileReady message is being generated and sent
+- the data is automatically deleted when it expires (`repetition-period`)
+
+
+### performance-management/index.json
+
+This file configures the performance data generation. It contains two objects:
+- *config* used to configure the performance-management feature
+- *values* which contain the values to be reported as data
+
+`config` contains the following parameters:
+- *log-period* - in seconds, is the period for writing a new file (using the values)
+- *repetition-period* - in seconds, represents data validity; the data is usually deleted after this period
+- *points* - a list of measurement point names (string)
+
+
+`values` contains a list of objects, each object comprised of the points defined in the config
+- the values are integer format
+- each object *MUST* contain data for *ALL* points defined
+
+### performance-management/template.xml
+
+The template is defined by this file. By design, it is an XML file.
+
+The **replace-variables** available inside are the following:
+- `@start-time@` - represents the start time of the performance measurement
+- `@end-time@` - represents the end time of the performance measurement
+- `@suspect@` - is written only if the file does not contain a full log period
+- `@log-period@` - log period as defined by the config, in interval representation (example: PT1S)
+- `@rep-period@` - repetition period as defined by the config, in interval representation (example: PT2H30M)
+- `@hostname@` - current device hostname
+- `@point-start@` and `@point-end@` marks the definition of the points list
+ - `@point-id@` - marks the point id
+ - `@point-name@` - point name as defined in the config
+- `@value-start@` and `@value-end@` marks the definition of the values list
+ - `@point-id@` - marks the point id
+ - `@value@` - value for the current point
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+services:
+ pynts-o-du-o1:
+ image: pynts-o-du-o1:${NTS_VERSION}
+ container_name: pynts-o-du-o1
+ hostname: pynts-o-du-o1
+ privileged: true
+ environment:
+ - ENDPOINT_COUNT=1
+
+ - NETCONF_USERNAME=netconf
+ - NETCONF_PASSWORD=netconf!
+
+ - O_DU_CALLHOME_PORT=4335
+
+ - SDNR_RESTCONF_URL=https://controller.dcn.smo.o-ran-sc.org
+ - SDNR_USERNAME=admin
+ - SDNR_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+ - VES_URL=http://ves-collector.dcn.smo.o-ran-sc.org/eventListener/v7
+ - VES_USERNAME=sample1
+ - VES_PASSWORD=sample1
+ # ports:
+ # - "830:830"
+ # - "6513:6513"
+ extra_hosts:
+ - "controller.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ - "ves-collector.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ volumes:
+ - ./o-du-o1/data:/data
+ networks:
+ oam:
+ smo:
+
+networks:
+ dmz:
+ external: true
+ smo:
+ external: true
+ oam:
+ external: true
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+services:
+ pynts-o-ru-hybrid:
+ image: pynts-o-ru-mplane:${NTS_VERSION}
+ container_name: pynts-o-ru-hybrid
+ hostname: pynts-o-ru-hybrid
+ privileged: true
+ environment:
+ - ENDPOINT_COUNT=1
+
+ - SDNR_RESTCONF_URL=https://controller.dcn.smo.o-ran-sc.org
+ - SDNR_USERNAME=admin
+ - SDNR_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+ extra_hosts:
+ - "controller.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ - "ves-collector.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ volumes:
+ - ./o-ru-mplane/data:/data
+ - ./o-ru-mplane/data/ietf-netconf-server-running-hybrid.json:/data/ietf-netconf-server-running.json
+ networks:
+ oam:
+ smo:
+
+ pynts-o-ru-hierarchical:
+ image: pynts-o-ru-mplane:${NTS_VERSION}
+ container_name: pynts-o-ru-hierarchical
+ hostname: pynts-o-ru-hierarchical
+ privileged: true
+ environment:
+ - ENDPOINT_COUNT=1
+
+ - SDNR_RESTCONF_URL=https://controller.dcn.smo.o-ran-sc.org
+ - SDNR_USERNAME=admin
+ - SDNR_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+ extra_hosts:
+ - "controller.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ - "ves-collector.dcn.${HTTP_DOMAIN}:${HOST_IP}"
+ volumes:
+ - ./o-ru-mplane/data:/data
+ - ./o-ru-mplane/data/ietf-netconf-server-running-hierarchical.json:/data/ietf-netconf-server-running.json
+ networks:
+ oam:
+ smo:
+
+networks:
+ dmz:
+ external: true
+ smo:
+ external: true
+ oam:
+ external: true
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+services:
+ pynts-dev-du:
+ image: pynts-o-du-o1:${NTS_VERSION}
+ container_name: pynts-dev-du
+ hostname: pynts-dev-du
+ privileged: true
+ environment:
+ - ENDPOINT_COUNT=1
+
+ - NETCONF_USERNAME=netconf
+ - NETCONF_PASSWORD=netconf!
+
+ - SDNR_RESTCONF_URL=http://controller.dcn.smo.o-ran-sc.org
+ - SDNR_USERNAME=admin
+ - SDNR_PASSWORD=admin
+
+ - VES_URL=https://ves-collector.dcn.smo.o-ran-sc.org/eventListener/v7
+ - VES_USERNAME=sample1
+ - VES_PASSWORD=sample1
+ # ports:
+ # - "830:830"
+ # - "6513:6513"
+ volumes:
+ - ./base/docker/conf/supervisord-du.conf:/etc/supervisor/conf.d/supervisord.conf
+ - ./base/src:/app
+ - ./o-du-o1/data:/data
+ - ./o-du-o1/src:/app/extensions/o-du-o1
+ # - ./ietf-microwave/data:/data
+
+ networks:
+ oam:
+ smo:
+
+ pynts-dev-ru:
+ image: pynts-o-ru-mplane:${NTS_VERSION}
+ container_name: pynts-dev-ru
+ hostname: pynts-dev-ru
+ privileged: true
+ environment:
+ - ENDPOINT_COUNT=1
+
+ - NETCONF_USERNAME=netconf
+ - NETCONF_PASSWORD=netconf!
+
+ - SDNR_RESTCONF_URL=http://controller.dcn.smo.o-ran-sc.org
+ - SDNR_USERNAME=admin
+ - SDNR_PASSWORD=admin
+
+ - VES_URL=https://ves-collector.dcn.smo.o-ran-sc.org/eventListener/v7
+ - VES_USERNAME=sample1
+ - VES_PASSWORD=sample1
+ # ports:
+ # - "830:830"
+ # - "6513:6513"
+ volumes:
+ - ./base/src:/app
+ - ./o-ru-mplane/data:/data
+ - ./o-ru-mplane/data/ietf-netconf-server-running-hybrid.json:/data/ietf-netconf-server-running.json
+
+ networks:
+ oam:
+ smo:
+
+networks:
+ dmz:
+ external: true
+ smo:
+ external: true
+ oam:
+ external: true
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies GmbH and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+FROM pynts-base:latest
+
+RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y \
+ # basic tools
+ wget && \
+ apt-get clean && \
+ rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
+
+COPY ./o-du-o1/docker/yang /usr/local/share/yang/modules/pynts
+COPY ./o-du-o1/docker/scripts/install_yangs.sh /opt/dev/scripts/install_yangs.sh
+
+# get and install required YANG libraries
+COPY ./o-du-o1/docker/scripts/get_yangs.sh /opt/dev/scripts/get_yangs.sh
+RUN \
+ /opt/dev/scripts/get_yangs.sh
+
+RUN \
+ /opt/dev/scripts/install_yangs.sh
+
+COPY ./o-du-o1/docker/conf/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
+COPY ./o-du-o1/src /app/extensions/o-du-o1
+RUN pip install -r /app/extensions/o-du-o1/requirements.txt
+
+WORKDIR /app
+
+ENV NETWORK_FUNCTION_TYPE="o-du-o1"
+
+EXPOSE 830
+CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
--- /dev/null
+{
+ "_3gpp-common-managed-element:ManagedElement": [
+ {
+ "id": "ManagedElement-002",
+ "attributes": {
+ "priorityLabel": 1
+ },
+ "_3gpp-nr-nrm-gnbdufunction:GNBDUFunction": [
+ {
+ "id": "GNBDUFunction-001",
+ "attributes": {
+ "priorityLabel": 1,
+ "gNBId": "1",
+ "gNBIdLength": 24,
+ "gNBDUId": "1",
+ "gNBDUName": "hostname_here"
+ },
+ "_3gpp-nr-nrm-nrcelldu:NRCellDU": [
+ {
+ "id": "NRCellDU-001",
+ "attributes": {
+ "priorityLabel": 1,
+ "cellLocalId": 1,
+ "pLMNInfoList": [
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 1
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 2
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 3
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 4
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 5
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sd": "ff:ff:ff",
+ "sst": 6
+ }
+ ],
+ "nPNIdentityList": [
+ {
+ "idx": 0,
+ "plmnid": [
+ {
+ "mcc": "310",
+ "mnc": "410"
+ }
+ ],
+ "cAGIdList": "cAGIdList1",
+ "nIDList": "nIDList1"
+ }
+ ],
+ "nRPCI": 1,
+ "arfcnDL": 1,
+ "rimRSMonitoringStartTime": "2024-06-19T20:00:00+00:00",
+ "rimRSMonitoringStopTime": "2024-06-19T21:00:00+00:00",
+ "rimRSMonitoringWindowDuration": 1,
+ "rimRSMonitoringWindowStartingOffset": 1,
+ "rimRSMonitoringWindowPeriodicity": 1,
+ "rimRSMonitoringOccasionInterval": 1,
+ "rimRSMonitoringOccasionStartingOffset": 0,
+ "ssbFrequency": 1,
+ "ssbPeriodicity": 5,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 1,
+ "ssbDuration": 1,
+ "nRSectorCarrierRef": [
+ "CN=NR-Sector-Carrier-001"
+ ],
+ "victimSetRef": "CN=Victim-Set-001",
+ "aggressorSetRef": "CN=Aggressor-Set-001"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
\ No newline at end of file
--- /dev/null
+{
+ "ietf-yang-schema-mount:schema-mounts": {
+ "namespace": [
+ {
+ "prefix": "or-agg-base",
+ "uri": "urn:o-ran:agg-base:1.0"
+ },
+ {
+ "prefix": "o-ran-int",
+ "uri": "urn:o-ran:interfaces:1.0"
+ },
+ {
+ "prefix": "o-ran-hw",
+ "uri": "urn:o-ran:hardware:1.0"
+ },
+ {
+ "prefix": "hw",
+ "uri": "urn:ietf:params:xml:ns:yang:ietf-hardware"
+ }
+ ],
+ "mount-point": [
+ {
+ "module": "o-ran-agg-interfaces",
+ "label": "interfaces-root",
+ "config": true,
+ "shared-schema": {}
+ },
+ {
+ "module": "o-ran-agg-hardware",
+ "label": "hardware-root",
+ "config": true,
+ "shared-schema": {}
+ },
+ {
+ "module": "o-ran-agg-ietf-hardware",
+ "label": "ietf-hardware-root",
+ "config": true,
+ "shared-schema": {}
+ }
+ ]
+ }
+}
--- /dev/null
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "O-RU-Chassis",
+ "class": "iana-hardware:chassis",
+ "parent-rel-pos": 0,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-Board",
+ "class": "o-ran-hardware:O-RAN-RADIO",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 0,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-Board"
+ },
+
+ {
+ "name": "O-RU-BF-CAL",
+ "class": "o-ran-hardware:O-RU-BF-CAL",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 3,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-FEEDER",
+ "class": "o-ran-hardware:O-RU-FEEDER",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 4,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-FPGA",
+ "class": "o-ran-hardware:O-RU-FPGA",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 5,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-FPGA"
+ },
+ {
+ "name": "O-RU-POWER-AMPLIFIER",
+ "class": "o-ran-hardware:O-RU-POWER-AMPLIFIER",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 6,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-POWER-AMPLIFIER"
+ }
+ ]
+ }
+ }
+
\ No newline at end of file
--- /dev/null
+{
+ "ietf-netconf-acm:nacm": {
+ "enable-nacm": true,
+ "read-default": "permit",
+ "write-default": "deny",
+ "exec-default": "permit",
+ "enable-external-groups": false,
+ "groups": {
+ "group": [
+ {
+ "name": "sudo",
+ "user-name": [
+ "sudo",
+ "admin",
+ "demx8as6",
+ "netconf"
+ ]
+ },
+ {
+ "name": "nms",
+ "user-name": [
+ "nms",
+ "nero"
+ ]
+ },
+ {
+ "name": "fm-pm",
+ "user-name": [
+ "fm-pm",
+ "filippa"
+ ]
+ },
+ {
+ "name": "swm",
+ "user-name": [
+ "swm",
+ "swami"
+ ]
+ },
+ {
+ "name": "smo",
+ "user-name": [
+ "smo",
+ "simone"
+ ]
+ },
+ {
+ "name": "hybrid-odu",
+ "user-name": [
+ "hybrid-odu",
+ "haydon"
+ ]
+ },
+ {
+ "name": "carrier",
+ "user-name": [
+ "carrier",
+ "carron"
+ ]
+ }
+ ]
+ },
+ "rule-list": [
+ {
+ "name": "admin-rule",
+ "group": [
+ "sudo",
+ "nms",
+ "fm-pm",
+ "swm",
+ "smo",
+ "hybrid-odu",
+ "carrier"
+ ],
+ "rule": [
+ {
+ "name": "allow-all",
+ "module-name": "*",
+ "access-operations": "*",
+ "action": "permit",
+ "comment": "All is allowed, no restictions!"
+ }
+ ]
+ }
+ ]
+ }
+ }
+
\ No newline at end of file
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "idle-timeout": 0,
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-endpoint",
+ "tls": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 6513
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-smo"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:CB:E3:29:E2:65:04:A8:DF:B3:63:E7:E4:1A:06:81:64:C6:DA:37",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+<schema-mounts xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount">
+ <namespace>
+ <prefix>or-agg-base</prefix>
+ <uri>urn:o-ran:agg-base:1.0</uri>
+ </namespace>
+ <namespace>
+ <prefix>o-ran-int</prefix>
+ <uri>urn:o-ran:interfaces:1.0</uri>
+ </namespace>
+ <namespace>
+ <prefix>o-ran-hw</prefix>
+ <uri>urn:o-ran:hardware:1.0</uri>
+ </namespace>
+ <namespace>
+ <prefix>hw</prefix>
+ <uri>urn:ietf:params:xml:ns:yang:ietf-hardware</uri>
+ </namespace>
+ <mount-point>
+ <module>o-ran-agg-interfaces</module>
+ <label>interfaces-root</label>
+ <config>true</config>
+ <inline/>
+ </mount-point>
+ <mount-point>
+ <module>o-ran-agg-hardware</module>
+ <label>hardware-root</label>
+ <config>true</config>
+ <inline/>
+ </mount-point>
+ <mount-point>
+ <module>o-ran-agg-ietf-hardware</module>
+ <label>ietf-hardware-root</label>
+ <config>true</config>
+ <inline/>
+ </mount-point>
+</schema-mounts>
--- /dev/null
+<aggregated-o-ru xmlns="urn:o-ran:agg-base:1.0">
+ <aggregation>
+ <ru-instance>Baciells_sRU67XXX_B122601202134000326</ru-instance>
+ <interfaces-model xmlns="urn:o-ran:agg-interfaces:1.0">
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>eth2-UPlane-VLAN</name>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:l2vlan</type>
+ <enabled>true</enabled>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ </ipv4>
+ <vlan-id xmlns="urn:o-ran:interfaces:1.0">5</vlan-id>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">00:11:22:33:44:55</mac-address>
+ </interface>
+ </interfaces>
+ </interfaces-model>
+ <hardware-model xmlns="urn:o-ran:agg-hardware:1.0">
+ <hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
+ <component>
+ <name>slot0-logical0-bbu</name>
+ <class xmlns:ianahw="urn:ietf:params:xml:ns:yang:iana-hardware">ianahw:port</class>
+ <o-ran-name xmlns="urn:o-ran:hardware:1.0">slot0-logical0-bbu</o-ran-name>
+ </component>
+ </hardware>
+ </hardware-model>
+ <ietf-hardware-model xmlns="urn:o-ran:agg-ietf-hardware:1.0">
+ <hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
+ <component>
+ <name>slot0-logical0-bbu</name>
+ <class xmlns:ianahw="urn:ietf:params:xml:ns:yang:iana-hardware">ianahw:port</class>
+ <o-ran-name xmlns="urn:o-ran:hardware:1.0">slot0-logical0-bbu</o-ran-name>
+ </component>
+ </hardware>
+ </ietf-hardware-model>
+ </aggregation>
+</aggregated-o-ru>
--- /dev/null
+<aggregated-o-ru xmlns="urn:o-ran:agg-base:1.0">
+ <aggregation>
+ <ru-instance>Baciells_sRU67XXX_B122601202134000326</ru-instance>
+ <interfaces-model xmlns="urn:o-ran:agg-interfaces:1.0">
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>eth2-UPlane-VLAN</name>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:l2vlan</type>
+ <enabled>true</enabled>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ </ipv4>
+ <vlan-id xmlns="urn:o-ran:interfaces:1.0">5</vlan-id>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">00:11:22:33:44:55</mac-address>
+ </interface>
+ </interfaces>
+ </interfaces-model>
+ <hardware-model xmlns="urn:o-ran:agg-hardware:1.0">
+ <hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
+ <component>
+ <name>slot0-logical0-bbu</name>
+ <class xmlns:ianahw="urn:ietf:params:xml:ns:yang:iana-hardware">ianahw:port</class>
+ <o-ran-name xmlns="urn:o-ran:hardware:1.0">slot0-logical0-bbu</o-ran-name>
+ </component>
+ </hardware>
+ </hardware-model>
+ <ietf-hardware-model xmlns="urn:o-ran:agg-ietf-hardware:1.0">
+ <hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
+ <component>
+ <name>slot0-logical0-bbu</name>
+ <class xmlns:ianahw="urn:ietf:params:xml:ns:yang:iana-hardware">ianahw:port</class>
+ <o-ran-name xmlns="urn:o-ran:hardware:1.0">slot0-logical0-bbu</o-ran-name>
+ </component>
+ </hardware>
+ </ietf-hardware-model>
+ </aggregation>
+</aggregated-o-ru>
--- /dev/null
+{
+ "o-ran-usermgmt:users":{
+ "user":[
+ {
+ "name":"x",
+ "account-type":"CERTIFICATE",
+ "password":"oiwtbqxj",
+ "enabled":true,
+ "sro-id":[
+ "x"
+ ]
+ }
+ ]
+ }
+}
--- /dev/null
+{
+ "o-ran-usermgmt:users":{
+ "user":[
+ {
+ "name":"smo",
+ "account-type":"CERTIFICATE",
+ "password":"oiwtbqxj",
+ "enabled":true,
+ "sro-id":[
+ "x"
+ ]
+ }
+ ]
+ }
+}
--- /dev/null
+{
+ "config": {
+ "log-period": 60,
+ "repetition-period": 180,
+
+ "points": [
+ "DRB.MeanActiveUeDl",
+ "DRB.MeanActiveUeUl",
+ "DRB.MaxActiveUeDl"
+ ]
+ },
+
+ "values": [
+ {
+ "DRB.MeanActiveUeDl": 0,
+ "DRB.MaxActiveUeDl": 3,
+ "DRB.MeanActiveUeUl": 17
+ },
+ {
+ "DRB.MeanActiveUeDl": 1,
+ "DRB.MaxActiveUeDl": 4,
+ "DRB.MeanActiveUeUl": 19
+ },
+ {
+ "DRB.MeanActiveUeDl": 2,
+ "DRB.MaxActiveUeDl": 9,
+ "DRB.MeanActiveUeUl": 19
+ }
+ ]
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="MeasDataCollection.xsl"?>
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader fileFormatVersion="32.435 V7.0" vendorName="PyNTS" dnPrefix="DC=pynts.domain">
+ <fileSender localDn="ManagedElement=@hostname@" elementType="nts-element"/>
+ <measCollec beginTime="@start-time@"/>
+ </fileHeader>
+ <measData>
+ <managedElement localDn="ManagedElement=@hostname@" userLabel=""/>
+ <measInfo>
+ <job jobId="1"/>
+ <granPeriod duration="@log-period@" endTime="@end-time@"/>
+ <repPeriod duration="@rep-period@"/>
+ @point-start@<measType p="@point-id@">@point-name@</measType>@point-end@
+ <measValue measObjLdn="DuFunction=@du-id@,CellId=@cell-id@">
+ @value-start@<r p="@point-id@">@value@</r>@value-end@
+ @suspect@
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="@end-time@"/>
+ </fileFooter>
+</measCollecFile>
--- /dev/null
+[supervisord]
+nodaemon=true
+logfile=/dev/null
+logfile_maxbytes=0
+pidfile=/var/run/supervisord.pid
+
+[program:netopeer2-server]
+command=/usr/local/sbin/netopeer2-server -d -v 3 -t 60 -x /data/ietf-yang-schema-mount.xml
+#command=/usr/local/sbin/netopeer2-server -d -v 2 -t 60
+stdout_logfile=/var/log/netopeer2-server.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=false
+
+[program:sshd]
+command=/usr/sbin/sshd -D
+stdout_logfile=/var/log/sshd.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=false
+
+
+[program:vsftpd]
+command=/usr/sbin/vsftpd
+stdout_logfile=/var/log/vsftpd.log
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+startsecs=0
+autorestart=true
+
+[program:pynts]
+command=python3 /app/application.py
+stdout_logfile=/var/log/pynts.log
+stdout_logfile_backups=2
+redirect_stderr=true
+startsecs=0
+autorestart=false
--- /dev/null
+#!/bin/bash
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies GmbH and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+DIRBIN="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+DIR_AVAILABLE_YANGS="$DIRBIN/available-yangs"
+DIR_YANGS="/usr/local/share/yang/modules/pynts"
+FILE_DOWNLOADZIP="/opt/dev/yangs.zip"
+TMPFOLDER="/tmp/o1-yangs"
+UNZIP=$(which unzip)
+if [ -z "$UNZIP" ]; then
+ echo "unable to find unzip. please install."
+ exit 1
+fi
+
+# download
+if [ ! -f "$FILE_DOWNLOADZIP" ]; then
+ # latest commit, working since 2024-01-17
+ wget --no-check-certificate -O "$FILE_DOWNLOADZIP" "https://forge.3gpp.org/rep/sa5/MnS/-/archive/Tag_Rel18_SA103/MnS-Tag_Rel18_SA103.zip?path=yang-models"
+
+ # latest release
+ # wget --no-check-certificate -O "$FILE_DOWNLOADZIP" "https://forge.3gpp.org/rep/sa5/MnS/-/archive/Tag_Rel17_SA96/MnS-Tag_Rel17_SA96.zip?path=yang-models"
+fi
+if [ ! -d "$DIR_AVAILABLE_YANGS" ]; then
+ mkdir "$DIR_AVAILABLE_YANGS"
+fi
+# cleanup yang folders
+rm -rf "$DIR_AVAILABLE_YANGS/"*
+unzip -uj yangs.zip -d "$TMPFOLDER"
+cp -r "$TMPFOLDER/"* "$DIR_AVAILABLE_YANGS/"
+
+rm "$FILE_DOWNLOADZIP"
+
+# fill yang folder
+cp "$DIR_AVAILABLE_YANGS/"_3gpp-common*.yang "$DIR_YANGS"
+cp "$DIR_AVAILABLE_YANGS/"ietf-*.yang "$DIR_YANGS/"
+
+declare special_files=(
+ "_3gpp-5g-common-yang-types.yang"
+ "_3gpp-5gc-nrm-configurable5qiset.yang"
+ "_3gpp-5gc-nrm-ecmconnectioninfo.yang"
+ "_3gpp-nr-nrm-bwp.yang"
+ "_3gpp-nr-nrm-ep.yang"
+ "_3gpp-nr-nrm-gnbcucpfunction.yang"
+ "_3gpp-nr-nrm-gnbcuupfunction.yang"
+ "_3gpp-nr-nrm-gnbdufunction.yang"
+ "_3gpp-nr-nrm-nrsectorcarrier.yang"
+ "_3gpp-nr-nrm-nrcelldu.yang"
+ "_3gpp-nr-nrm-rrmpolicy.yang"
+ "_3gpp-nr-nrm-nrcellcu.yang"
+ #"_3gpp-nr-nrm-ecmappingrule.yang"
+)
+
+for file in "${special_files[@]}"
+do
+ cp "$DIR_AVAILABLE_YANGS/$file" "$DIR_YANGS/"
+done
--- /dev/null
+#!/usr/bin/env bash
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies GmbH and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+# env variables NP2_MODULE_DIR, NP2_MODULE_PERMS and LN2_MODULE_DIR must be defined
+# and NP2_MODULE_OWNER, NP2_MODULE_GROUP will be used if defined when executing this script!
+
+if [ -z "$NP2_MODULE_PERMS" -o -z "$PYNTS_MODULE_DIR" ]; then
+ echo "Required environment variables not defined!"
+ exit 1
+fi
+
+# import functions and modules arrays
+script_directory=$(dirname "$0")
+source "${script_directory}/common.sh"
+
+# array of modules to install
+MODULES=(
+"_3gpp-common-yang-extensions.yang"
+"_3gpp-common-yang-types.yang"
+"_3gpp-common-top.yang"
+"_3gpp-common-files.yang"
+"_3gpp-common-measurements.yang"
+"_3gpp-common-ep-rp.yang"
+"_3gpp-common-subscription-control.yang"
+"_3gpp-common-fm.yang"
+"_3gpp-common-trace.yang"
+"_3gpp-5gc-nrm-configurable5qiset.yang"
+"_3gpp-5gc-nrm-ecmconnectioninfo.yang"
+#"_3gpp-nr-nrm-ecmappingrule.yang"
+"_3gpp-common-subnetwork.yang"
+"_3gpp-common-managed-element.yang -e FmUnderManagedElement"
+"_3gpp-5g-common-yang-types.yang"
+"_3gpp-common-managed-function.yang -e MeasurementsUnderManagedFunction"
+"_3gpp-common-managementdatacollection.yang"
+"_3gpp-common-mnsregistry.yang"
+"_3gpp-common-qmcjob.yang"
+"_3gpp-nr-nrm-gnbdufunction.yang"
+"_3gpp-nr-nrm-gnbcucpfunction.yang"
+"_3gpp-nr-nrm-gnbcuupfunction.yang"
+"_3gpp-nr-nrm-bwp.yang"
+"_3gpp-nr-nrm-nrcelldu.yang"
+"_3gpp-nr-nrm-nrsectorcarrier.yang"
+"_3gpp-common-filemanagement.yang"
+"_3gpp-nr-nrm-ep.yang"
+"_3gpp-nr-nrm-rrmpolicy.yang"
+
+"o-ran_3gpp-nr-nrm-gnbdufunction.yang"
+"o-ran_3gpp-nr-nrm-nrcelldu.yang"
+#"o-ran_3gpp-nr-nrm-rrmpolicy.yang"
+
+"o-ran-operations.yang"
+"o-ran-hardware.yang -e ENERGYSAVING"
+"o-ran-interfaces.yang"
+
+"o-ran-agg-ald-port.yang"
+"o-ran-agg-ald.yang"
+"o-ran-agg-antenna-calibration.yang"
+"o-ran-agg-beamforming.yang"
+"o-ran-agg-dhcp.yang"
+"o-ran-agg-ecpri-delay.yang"
+"o-ran-agg-ethernet-forwarding.yang"
+"o-ran-agg-externalio.yang"
+"o-ran-agg-fan.yang"
+"o-ran-agg-hardware.yang"
+"o-ran-agg-ietf-hardware.yang"
+"o-ran-agg-ietf-interfaces.yang"
+"o-ran-agg-ietf-ip.yang"
+"o-ran-agg-ietf-netconf-acm.yang"
+"o-ran-agg-interfaces.yang"
+"o-ran-agg-laa-operations.yang"
+"o-ran-agg-laa.yang"
+"o-ran-agg-lbm.yang"
+"o-ran-agg-module-cap.yang"
+"o-ran-agg-mplane-int.yang"
+"o-ran-agg-operations.yang"
+#"o-ran-agg-performance-management.yang"
+"o-ran-agg-processing-element.yang"
+"o-ran-aggregation-base.yang"
+"o-ran-agg-shared-cell.yang"
+"o-ran-agg-software-management.yang"
+"o-ran-agg-supervision.yang"
+"o-ran-agg-transceiver.yang"
+"o-ran-agg-udp-echo.yang"
+"o-ran-agg-uplane-conf.yang"
+"o-ran-agg-usermgmt.yang"
+"o-ran-c-plane-tnl.yang"
+"o-ran-cti-common.yang"
+"o-ran-dhcp.yang"
+"o-ran-du-f1-tnl.yang"
+"o-ran-du-performance-management.yang"
+"o-ran-nr-u.yang"
+"o-ran-o1-ctiOdu.yang"
+"o-ran-o-du-shared-o-ru.yang"
+"o-ran-qos.yang"
+"o-ran-rlc.yang"
+"o-ran-synchronization.yang"
+"o-ran-u-plane-tnl.yang"
+"o-ran-usermgmt.yang -I /usr/local/share/yang/modules/pynts/o-ran-usermgmt.xml"
+# "o-ran-wg5-delay-management.yang"
+"o-ran-wg5-features.yang"
+)
+
+# get path to sysrepoctl executable, this will be stored in $SYSREPOCTL
+SYSREPOCTL_GET_PATH
+
+PYNTS_MODDIR=${DESTDIR}${PYNTS_MODULE_DIR}
+
+# get current modules
+SCTL_MODULES=`$SYSREPOCTL -l`
+
+# the install command will be stored in this variable
+CMD_INSTALL=
+
+SETUP_CMD "$PYNTS_MODDIR" "${MODULES[@]}"
+
+# install all the new modules
+if [ ! -z "${CMD_INSTALL}" ]; then
+ eval $CMD_INSTALL
+ rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+fi
--- /dev/null
+module o-ran-agg-ald-port {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ald-port:1.0";\r
+ prefix "or-agg-ald-port";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ald-port information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ald-port-model {\r
+ yangmnt:mount-point "ald-port-root" {\r
+ description\r
+ "Root for o-ran-ald-port.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ald {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ald:1.0";\r
+ prefix "or-agg-ald";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ald information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ald-model {\r
+ yangmnt:mount-point "ald-root" {\r
+ description\r
+ "Root for o-ran-ald.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-antenna-calibration {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-antcal:1.0";\r
+ prefix "or-agg-antcal";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat antenna-calibration information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container antcal-model {\r
+ yangmnt:mount-point "antcal-root" {\r
+ description\r
+ "Root for o-ran-antenna-calibration.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-beamforming {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-beamforming:1.0";\r
+ prefix "or-agg-bf";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat beamforming information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container beamforming-model {\r
+ yangmnt:mount-point "beamforming-root" {\r
+ description\r
+ "Root for o-ran-beamforming.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-dhcp {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-dhcp:1.0";\r
+ prefix "or-agg-dhcp";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat dhcp information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container dhcp-model {\r
+ yangmnt:mount-point "dhcp-root" {\r
+ description\r
+ "Root for o-ran-dhcp.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ecpri-delay {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-message5:1.0";\r
+ prefix "or-agg-msg5";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ecpri-delay information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ecpri-delay-model {\r
+ yangmnt:mount-point "ecpri-delay-root" {\r
+ description\r
+ "Root for o-ran-ecpri-delay.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ethernet-forwarding {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:ethernet-fwd::1.0";\r
+ prefix "or-agg-eft";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ethernet-forwarding information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ethernet-fwd-model {\r
+ yangmnt:mount-point "ethernet-fwd-root" {\r
+ description\r
+ "Root for o-ran-ethernet-forwarding.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-externalio {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-externalio:1.0";\r
+ prefix "or-agg-io";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat externalio information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container externalio-model {\r
+ yangmnt:mount-point "externalio-root" {\r
+ description\r
+ "Root for o-ran-externalio.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-fan {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-fan:1.0";\r
+ prefix "or-agg-fan";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat fan information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container fan-model {\r
+ yangmnt:mount-point "fan-root" {\r
+ description\r
+ "Root for o-ran-fan.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-hardware {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-hardware:1.0";\r
+ prefix "or-agg-hw";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat hardware information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container hardware-model {\r
+ yangmnt:mount-point "hardware-root" {\r
+ description\r
+ "Root for o-ran-hardware.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ietf-hardware {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ietf-hardware:1.0";\r
+ prefix "or-agg-ietf-hw";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ietf-hardware information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ietf-hardware-model {\r
+ yangmnt:mount-point "ietf-hardware-root" {\r
+ description\r
+ "Root for ietf-hardware.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ietf-interfaces {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ietf-interfaces:1.0";\r
+ prefix "or-agg-ietf-if";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ietf-interfaces information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ietf-interfaces-model {\r
+ yangmnt:mount-point "ietf-interfaces-root" {\r
+ description\r
+ "Root for ietf-interfaces.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ietf-ip {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ietf-ip:1.0";\r
+ prefix "or-agg-ietf-ip";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ietf-ip information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ietf-ip-model {\r
+ yangmnt:mount-point "ietf-ip-root" {\r
+ description\r
+ "Root for ietf-ip.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-ietf-netconf-acm {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ietf-netconf-acm:1.0";\r
+ prefix "or-agg-ietf-nacm";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat ietf-netconf-acm information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container ietf-netconf-acm-model {\r
+ yangmnt:mount-point "ietf-netconf-acm-root" {\r
+ description\r
+ "Root for ietf-netconf-acm.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-interfaces {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-interfaces:1.0";\r
+ prefix "or-agg-int";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat interfaces information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container interfaces-model {\r
+ yangmnt:mount-point "interfaces-root" {\r
+ description\r
+ "Root for o-ran-interfaces.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-laa-operations {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-laa-operations:1.0";\r
+ prefix "or-agg-laa-operations";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat laa-operaions information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container laa-operations-model {\r
+ yangmnt:mount-point "laa-operations-root" {\r
+ description\r
+ "Root for o-ran-laa-operaions.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-laa {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-laa:1.0";\r
+ prefix "or-agg-laa";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat laa information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container laa-model {\r
+ yangmnt:mount-point "laa-root" {\r
+ description\r
+ "Root for o-ran-laa.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-lbm {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-lbm:1.0";\r
+ prefix "or-agg-lbm";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat lbm information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container lbm-model {\r
+ yangmnt:mount-point "lbm-root" {\r
+ description\r
+ "Root for o-ran-lbm.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-module-cap {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-module-cap:1.0";\r
+ prefix "or-agg-module-cap";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat module-cap information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container module-cap-model {\r
+ yangmnt:mount-point "module-cap-root" {\r
+ description\r
+ "Root for o-ran-module-cap.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-mplane-int {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-mplane-int:1.0";\r
+ prefix "or-agg-mplane-int";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat mplane-int information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container mplane-int-model {\r
+ yangmnt:mount-point "mplane-int-root" {\r
+ description\r
+ "Root for o-ran-mplane-int.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-operations {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-ops:1.0";\r
+ prefix "or-agg-ops";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to\r
+ include the operational state of the aggregated O-RUs.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container operations-model {\r
+ yangmnt:mount-point "ops-root" {\r
+ description\r
+ "Root for o-ran-operations.yang model supported on a per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-performance-management {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-pm:1.0";\r
+ prefix "or-agg-pm";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ import _3gpp-common-measurements {\r
+ prefix "meas3gpp";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module\r
+ to include the performance-measurement-objects information of the\r
+ aggregated O-RUs.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ uses meas3gpp:Measurements;\r
+ container performance-management-model {\r
+ yangmnt:mount-point "pm-root" {\r
+ description\r
+ "Root for performance-measurement-objects in\r
+ o-ran-performance-management.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-processing-element {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-processing-element:1.0";\r
+ prefix "or-agg-elements";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat processing element information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container processing-element-model {\r
+ yangmnt:mount-point "processing-element-root" {\r
+ description\r
+ "Root for o-ran-processing-element.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-shared-cell {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-shared-cell:1.0";\r
+ prefix "or-agg-sc";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat shared-cell information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container shared-cell-model {\r
+ yangmnt:mount-point "shared-cell-root" {\r
+ description\r
+ "Root for o-ran-shared-cell.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-software-management {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-swm:1.0";\r
+ prefix "or-agg-swm";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to include the software inventory information of the aggregated O-RUs.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container software-management-model {\r
+ yangmnt:mount-point "swm-root" {\r
+ description\r
+ "Root for o-ran-software-management.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-supervision {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-supervision:1.0";\r
+ prefix "or-agg-supervision";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat supervision notification of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container supervision-model {\r
+ yangmnt:mount-point "supervision-root" {\r
+ description\r
+ "Root for o-ran-supervision.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-transceiver {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-transceiver:1.0";\r
+ prefix "or-agg-transceiver";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat transceiver information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container transceiver-model {\r
+ yangmnt:mount-point "transceiver-root" {\r
+ description\r
+ "Root for o-ran-transceiver.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-udp-echo {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-udpecho:1.0";\r
+ prefix "or-agg-echo";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat udp-echo information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container udp-echo-model {\r
+ yangmnt:mount-point "udp-echo-root" {\r
+ description\r
+ "Root for o-ran-udp-echo.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-uplane-conf {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-uplane-conf:1.0";\r
+ prefix "or-agg-uplane-conf";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat uplane-conf information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description \r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container uplane-conf-model {\r
+ yangmnt:mount-point "uplane-conf-root" {\r
+ description\r
+ "Root for o-ran-uplane-conf.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-agg-usermgmt {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-user-mgmt:1.0";\r
+ prefix "or-agg-usermgmt";\r
+\r
+ import o-ran-aggregation-base {\r
+ prefix "agg";\r
+ }\r
+\r
+ import ietf-yang-schema-mount {\r
+ prefix "yangmnt";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the base aggregation module to treat usermgmt information of each O-RU under O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ augment "/agg:aggregated-o-ru/agg:aggregation" {\r
+ container usermgmt-model {\r
+ yangmnt:mount-point "usermgmt-root" {\r
+ description\r
+ "Root for o-ran-usermgmt.yang model supported per O-RU instance";\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-aggregation-base {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:agg-base:1.0";\r
+ prefix "or-agg-base";\r
+\r
+ import o-ran-operations {\r
+ prefix "or-ops";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the base model used for aggregating WG4 YANG models.\r
+\r
+ Individual YANG models are expected to augment this base model with their\r
+ own schema trees to facilitate operations on a per ru-instance-id basis.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ typedef ru-ref {\r
+ type leafref {\r
+ path "/or-ops:operational-info/or-ops:declarations/or-ops:ru-instance-id";\r
+ }\r
+ description\r
+ "A type defintion for the ru-instance-id. Although the type used in\r
+ o-ran-operations is only a 'string', this leafref is used to indicate\r
+ that the type 'ru-ref' is used to encode ru-instance-id values.\r
+\r
+ These will typically have been recovered using the NETCONF client in an\r
+ O-DU which has a NETCONF session with an O-RU which implements the\r
+ o-ran-operations.yang model. ";\r
+ }\r
+\r
+ grouping ru-grouping {\r
+ list recovered-ru-instance-ids {\r
+ key ru-instance-id;\r
+ config false;\r
+ description\r
+ "a list of O-RU instance IDs that have been recovered by an O-DU which\r
+ either has:\r
+ i) a NETCONF session with an O-RU using the O-RAN WG4 fronthaul\r
+ defined NETCONF/YANG interface, or\r
+ ii) some vendor proprietary scheme for a managed element that integrates\r
+ both O-DU and O-RU functionality.";\r
+\r
+ leaf ru-instance-id {\r
+ type ru-ref;\r
+ config false;\r
+ }\r
+ }\r
+ list aggregation {\r
+ key ru-instance;\r
+ description\r
+ "a list used to aggregate the configuration and operational state of\r
+ multiple O-RUs.";\r
+\r
+ leaf ru-instance {\r
+ type leafref {\r
+ path "/aggregated-o-ru/recovered-ru-instance-ids/ru-instance-id";\r
+ require-instance false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ container aggregated-o-ru {\r
+ description\r
+ "The top level container used to hold all the aggregated information related\r
+ to a set of O-RUs.";\r
+\r
+ uses ru-grouping;\r
+ }\r
+}\r
--- /dev/null
+module o-ran-ald-port {
+ yang-version 1.1;
+ namespace "urn:o-ran:ald-port:1.0";
+ prefix "o-ran-ald-port";
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ the Antenna Line Device capability.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 13.1.0
+
+ 1) Improve description of dc-control-support.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of O-RU Connectors for ALD Port.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) Typographical corrections for british english.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature OVERCURRENT-SUPPORTED {
+ description
+ "This feature indicates that the equipment supports the over-current notification
+ capability.";
+ }
+
+// Groupings
+
+ grouping aldport-group {
+ description "a port grouping ";
+ leaf over-current-supported {
+ type boolean;
+ config false;
+ description
+ "Set to TRUE when the equipment supports over-current notifications";
+ }
+
+ list ald-port {
+ key "name";
+
+ config false;
+
+ description
+ "Leaf nodes describing ALD Port";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique 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 indicates whether the control of on/off in the DC power supply is possible.
+ In case of False, power control is not supported and state of power supply will meet requiremments of ALD,
+ i.e. power supply always on for AISG 2.0 equipment.";
+ }
+
+ leaf dc-enabled-status {
+ when "../dc-control-support = 'true'";
+ type boolean;
+ default false;
+ description
+ "Status of DC voltage enabled on antenna line.
+ Valid only in case dc-control-support is true.";
+ }
+
+ 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.";
+ }
+
+ leaf-list related-o-ru-connectors {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR') or
+ derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-RS485')";
+ description
+ "Referenced name of O-RU connector(s) used by the ALD port. Note: plurality of connectors
+ related to single ALD port means, that HDLC stack is common for all of reported connectors.
+ When this node exists, value provided in node 'supported-connector' is ignored and leaf-list
+ 'supported-o-ru-connectors' takes precedence";
+ }
+ }
+
+ list ald-port-dc-control {
+ key "name";
+
+ description
+ "Container needed to manage DC on ALD ports";
+
+ leaf name {
+ type leafref {
+ path "/ald-ports-io/ald-port/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Name derived from unmodifiable list ald-port";
+ }
+
+ leaf dc-enabled{
+ type boolean;
+
+ description
+ "If dc-control-support is true case, this leaf is effective.
+ If dc-control-support is not true this leaf makes no action
+ In case of true, the power supply shall be turned on.";
+ }
+ }
+ }
+
+ grouping overcurrent-group {
+ description "overcurrent group";
+ 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";
+ }
+
+ leaf-list related-o-ru-connectors {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR') or
+ derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-RS485')";
+ description
+ "Optional extension to provide exact information about O-RU connector(s)
+ affected by overcurrent condition and related to specific ALD port
+ overcurrent condition has been reported.";
+ }
+ }
+ }
+
+ grouping dc-enabled-group {
+ description "dc enabled group";
+ list ald-port {
+ key name;
+ description
+ "list of ald-ports that has its dc-enabled-status changed";
+ leaf name{
+ type leafref {
+ path "/ald-ports-io/ald-port/name";
+ }
+ description "Name of port which has changed";
+ }
+ leaf dc-enabled-status{
+ type leafref {
+ path "/ald-ports-io/ald-port/dc-enabled-status";
+ }
+ description "New status of dc-enabled-status";
+ }
+ }
+ }
+
+// Top Level Container
+
+ container ald-ports-io {
+ description
+ "ALD port information.
+ ALD port of the equipment 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.";
+
+ uses aldport-group;
+ }
+
+ notification overcurrent-report {
+ if-feature OVERCURRENT-SUPPORTED;
+
+ description
+ "The equipment 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.";
+
+ uses overcurrent-group;
+ }
+
+ notification dc-enabled-status-change {
+ description
+ "The equipment is able to report the change of 'dc-enabled-status' of the ald-port.
+ This is applicable when the leaf 'dc-control-support' of the ald-pot is 'TRUE'.";
+
+ uses dc-enabled-group;
+ }
+}
--- /dev/null
+module o-ran-ald {
+ yang-version 1.1;
+ namespace "urn:o-ran:ald:1.0";
+ prefix "o-ran-ald";
+
+ import o-ran-ald-port {
+ prefix "ap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module for the ALD communication.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) Typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping ald-input {
+ description "a grouping for ald 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";
+ }
+ }
+
+ grouping ald-output {
+ description "a grouping for ald 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 O-RU";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of RPC handling seen from equipment 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";
+ }
+ }
+ // rpc-statements
+ rpc ald-communication {
+ description
+ "RPC to support communication between O-DU and Antenna Line Devices";
+
+ input {
+ uses ald-input;
+ }
+
+ output {
+ uses ald-output;
+ }
+ }
+}
--- /dev/null
+module o-ran-antenna-calibration {
+ yang-version 1.1;
+ namespace "urn:o-ran:antcal:1.0";
+ prefix "o-ran-antcal";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration required for supporting the optional
+ antenna calibration functionality.
+
+ Copyright 2024 the O-RAN 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:
+
+ * Redistribution of source code must retain the above copyright notice,
+ this list of conditions and the above disclaimer.
+ * Redistribution 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2024-04-15 {
+ description
+ "version 7.2.0
+
+ 1) fixing bug in coordinated-ant-calib-prep-timer.";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-12-01 {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-07-26 {
+ description
+ "version 7.0.0
+
+ 1) O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE is added as optional feature
+ to provide support for multiple antenna calibration time resources configurations.
+ 2) Flag for O-DU to control if O-RU is allowed to support this feature
+ 'coordinated-calibration-multiple-time-resources-allowed'
+ 3) defined grouping 'antenna-calibration-multiple-time-resource' from which list
+ for supporting multiple antenna calibration time resource configuration is supported.
+ 4) created new container 'antenna-calibration-multiple-time-resource' with list
+ 'antenna-calibration-multiple-time-resource-list' and key to index the list
+ 'antenna-calibration-time-resource-index'.
+ 5) added new notification 'antenna-calibration-multiple-time-resource-params' with
+ 'antenna-calibration-time-resource-index' as a leaf to indicate index of time resource
+ 6) Added support for configured preparedness timer for co-ordinated calibration";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-03-22 {
+ description
+ "version 5.1.0
+
+ 1) removing non-ASCII characters in model.";
+
+ reference "ORAN-WG4.MP-v05.00";
+ }
+
+
+ revision 2020-12-10 {
+ description
+ "version 5.0.0
+
+ 1) O-RU-COORDINATED-ANT-CAL is added as optional feature
+ to provide the antenna calibration without RPC
+ on the condition that coordinated-calibration-support is true
+ and coordinated-calibration-allowed is true.";
+
+ reference "ORAN-WG4.MP-v05.00";
+ }
+
+ revision 2019-07-03 {
+ description
+ "version 1.0.0
+
+ 1) Newly introduced model for supporting optional
+ antenna calibration functionality";
+
+ reference "ORAN-WG4.MP-v02.00";
+ }
+
+ feature O-RU-COORDINATED-ANT-CAL {
+ description
+ "Indicates that the O-RU needs user traffic to be co-ordinated from O-DU for antenna calibration.";
+ }
+
+ feature O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE {
+ description
+ "Indicates O-RU support for antenna calibration with multiple timing resource sets. Refer Section
+ 'Calibration with multiple timing resource sets' of M-Plane specification v7";
+ }
+
+ grouping antenna-calibration-capabilities {
+ description "container for collection of leafs for antenna calibration";
+
+ leaf self-calibration-support {
+ type boolean;
+ default false;
+ description
+ "Indicates whether O-RU supports self-calibration or not.
+
+ When true, indicates O-RU can initiate calibration without receiving an
+ RPC and/or impacting simultaneous CU-plane operation";
+ }
+ leaf coordinated-calibration-support {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ default false;
+ description
+ "True means the O-RU is able to determine priori the time-frequency
+ resources required for self-calibration and indicate those to the O-DU
+ in the antenna-calibration-coordinated notification.";
+ }
+ leaf number-of-calibration-symbols-per-block-dl {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-symbols-per-block-ul {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-blocks {
+ type uint8;
+ units symbols;
+ description
+ "if time interval is required between consecutive antenna calibration
+ operation, defines this time value as unit of symbols.
+
+ A common value is used here for the intervals
+ between DL-DL blocks, UL-UL blocks, DL-UL blocks and UL-DL blocks,
+ which is the largest minimum interval required between any two adjacent
+ calibration blocks.";
+ }
+ leaf number-of-calibration-blocks-per-step-dl {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-blocks-per-step-ul {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-steps {
+ type uint8;
+ units radio-frames;
+ description
+ "If time interval is required between consecutive step of antenna
+ calibration operation, defines this time value as unit of radio frames";
+ }
+ leaf number-of-calibration-steps {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many steps are required for whole DL/UL antenna
+ calibration operation";
+ }
+ leaf calibration-period {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint16;
+ units minutes;
+ description "periodical interval between antenna calibrations in the case of support of feature O-RU-COORDINATED-ANT-CAL";
+ }
+ leaf configured-preparation-timer-supported {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ default false;
+ description
+ "indicates if the O-RU supports configuration of the preparedness timer
+ that controls how far in advance of the co-ordinated self calibration
+ procedure the O-RU is required to send the notification of impacted
+ resources.";
+ }
+ }
+
+ grouping antenna-calibration-multiple-time-resource {
+ description
+ "Grouping for collection of leafs for antenna calibration capability of O-RU supporting
+ multiple time resource when feature O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE
+ is supported in the O-RU";
+
+ leaf number-of-calibration-symbols-per-block-dl {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-symbols-per-block-ul {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-blocks {
+ type uint8;
+ units symbols;
+ description
+ "if time interval is required between consecutive antenna calibration
+ operation, defines this time value as unit of symbols.
+
+ A common value is used here for the intervals
+ between DL-DL blocks, UL-UL blocks, DL-UL blocks and UL-DL blocks,
+ which is the largest minimum interval required between any two adjacent
+ calibration blocks.";
+ }
+ leaf number-of-calibration-blocks-per-step-dl {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-blocks-per-step-ul {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-steps {
+ type uint8;
+ units radio-frames;
+ description
+ "If time interval is required between consecutive step of antenna
+ calibration operation, defines this time value as unit of radio frames";
+ }
+ leaf number-of-calibration-steps {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many steps are required for whole DL/UL antenna
+ calibration operation";
+ }
+ leaf calibration-period {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint16;
+ units minutes;
+ description "periodical interval between antenna calibrations in the case of support of feature O-RU-COORDINATED-ANT-CAL";
+ }
+ }
+
+ grouping antenna-calibration {
+ container antenna-calibration-capabilities {
+ config false;
+ description
+ "Describes the antenna calibration capabilities";
+ uses antenna-calibration-capabilities;
+ }
+ container self-calibration-policy {
+ leaf self-calibration-allowed {
+ type boolean;
+ default false;
+ description
+ "whether the self-calibration is allowed by operator.
+ Note, self-calibration-allowed and coordinated-calibration-allowed cannot both be set to true";
+ }
+ leaf coordinated-calibration-allowed {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ must "../self-calibration-allowed = 'false'";
+ default false;
+ description
+ "whether the coordinated-calibration is allowed by operator.
+
+ True means that O-DU may beneficially use the indicated time-frequency resources
+ to adapt its operation during the antenna calibration operation,
+ e.g., consider the time-frequency resources as reserved for calibration.
+ Both calibrations (self-calibration-allowed and coordinated-calibration-support) disallowed
+ or one of them allowed only";
+ }
+ leaf coordinated-ant-calib-prep-timer {
+ when "../coordinated-calibration-allowed = 'true'";
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint8 {
+ range "2..10|60";
+ }
+ units seconds;
+ default 60;
+ description
+ "minimum time between O-RU sending notification of time-frequeny resources
+ for co-ordinated calibration to O-DU and O-RU starting co-ordinated
+ self-calibration procedure.
+
+ Note, the default value of 60 seconds is to accommodate earlier versions
+ which hard coded that value in the O-RAN.WG4.MP.0 specification.
+
+ An O-RU that has set configured-preparation-timer-supported=false shall
+ always use the default value of 60 seconds";
+ }
+ leaf coordinated-calibration-multiple-time-resources-allowed {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ type boolean;
+ default false;
+ description
+ "TRUE: O-RU is allowed to request for this calibration, FALSE: O-RU is prohibited to use this calibration";
+ }
+ description
+ "Describes the self calibration policies and configuration of the operator";
+ }
+
+ container antenna-calibration-multiple-time-resource {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ config false;
+ list antenna-calibration-multiple-time-resource-list {
+ key "antenna-calibration-time-resource-index";
+ uses antenna-calibration-multiple-time-resource;
+
+ leaf antenna-calibration-time-resource-index {
+ type uint8;
+ description
+ "Key for indexing 'antenna-calibration-multiple-time-resource-list'";
+ }
+ description
+ "List of antenna calibration time resource configuration indexed by
+ antenna calibration time resource index";
+ }
+ description
+ "Container to support multiple antenna calibration resource sets by defining
+ multiple calibration resources sets for different calibration types.";
+ }
+
+ description
+ "Describe the grouping set of antenna calibration";
+ }
+
+ grouping antenna-calibration-data {
+ description "information set for the operation of antenna calibration";
+
+ leaf symbol-bitmask-dl {
+ type string {
+ length "14";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration symbol within a calibration slot.
+ First character in the string indicate first symbol,
+ next character in the string indicate second symbol and so on.
+ Value 1 indicates that the symbol may be used for calibration
+ and 0 means the symbol shall not be used for calibration.";
+ }
+ leaf symbol-bitmask-ul {
+ type string {
+ length "14";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration symbol within a calibration slot.
+ First character in the string indicate first symbol,
+ next character in the string indicate second symbol and so on.
+ Value 1 indicates that the symbol may be used for calibration
+ and 0 means the symbol shall not be used for calibration.";
+ }
+ leaf slot-bitmask-dl {
+ type string {
+ length "10..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration slot within a calibration frame.
+ First character in the string indicate first slot,
+ next character in the string indicate second slot and so on.
+ Value 1 indicates that the slot may be used for calibration
+ and 0 means the slot shall not be used for calibration.";
+ }
+ leaf slot-bitmask-ul {
+ type string {
+ length "10..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration slot within a calibration frame.
+ First character in the string indicate first slot,
+ next character in the string indicate second slot and so on.
+ Value 1 indicates that the slot may be used for calibration
+ and 0 means the slot shall not be used for calibration.";
+ }
+ leaf frame-bitmask-dl {
+ type string {
+ length "1..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration frame within a calibration step.
+ First character in the string indicate first radio frame equal to
+ the start-SFN, next character in the string indicate the next frame
+ and so on.
+
+ Value 1 indicates that the frame may be used for calibration
+ and 0 means the frame shall not be used for calibration.";
+ }
+ leaf frame-bitmask-ul {
+ type string {
+ length "1..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration frame within a calibration step.
+ First character in the string indicate first radio frame equal to
+ the start-SFN, next character in the string indicate the next frame
+ and so on.
+
+ Value 1 indicates that the frame is may be used for calibration
+ and 0 means the frame shall not be used for calibration.";
+ }
+ leaf calibration-step-size {
+ type uint8;
+ mandatory true;
+ description " Number of frames within a calibration step";
+ }
+ leaf calibration-step-number {
+ type uint8;
+ mandatory true;
+ description "Number of calibration steps";
+ }
+ leaf start-sfn {
+ type uint16 {
+ range "0..1023";
+ }
+ mandatory true;
+ description "start SFN number of the first calibration step";
+ }
+ }
+
+ container antenna-calibration {
+ uses antenna-calibration;
+ description
+ "Describes the antenna calibration top node";
+ }
+
+ rpc start-antenna-calibration {
+ description
+ "The antenna calibration operation can start when NETCONF client sends a
+ calibration start command with resource allocation parameters.
+ These parameters indicate how the O-RU can perform the antenna
+ calibration operation; at which Symbol, Slot, and Frame.
+ This scheduling information can be generated by O-RU itself.
+ However, in a dynamic TDD environment, the DL and UL configuration
+ is only determined and known by O-DU. Consequently, only O-DU (NETCONF
+ client ) can determine and configure the scheduling and resource
+ allocation permitted for use by the antenna calibration operation";
+ input {
+ uses antenna-calibration-data;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description
+ "Status information to indicate that O-RU accepted RPC
+ antenna calibration start request";
+ }
+ enum REJECTED {
+ description
+ "Status information to indicate that O-RU rejected RPC antenna
+ calibration start request";
+ }
+ }
+ mandatory true;
+ description
+ "Status of whether antenna calibration trigger by RPC is accepted
+ by the O-RU";
+ }
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "Detailed error Message when the status is rejected, e.g.,
+ because O-RU can not start antenna calibration
+ such as already running antenna calibration,
+ resource mask mismatch with O-RU antenna calibration capability,
+ overlapped DL and UL masks, insufficient memory, O-RU internal reason";
+ }
+ }
+ }
+
+ notification antenna-calibration-required {
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+
+ description
+ "this notification indicates that the antenna calibration is required in O-RU";
+ }
+
+ notification antenna-calibration-coordinated {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+ uses antenna-calibration-data {
+ description
+ "In the case of support of feature O-RU-COORDINATED-ANT-CAL,
+ time-frequency resource determined by O-RU will be included";
+ }
+
+ description
+ "this notification indicates that co-ordinated antenna calibration is provided in O-RU.
+ It indicates the time-frequency resources will be sent to a subscribed O-DU at least coordinated-ant-calib-prep-timer seconds
+ before the operation of the co-ordinated antenna calibration procedure.";
+ }
+
+ notification antenna-calibration-result {
+ leaf status {
+ type enumeration {
+ enum SUCCESS {
+ description "O-RU has succeeded in calibrating its antenna";
+ }
+ enum FAILURE {
+ description
+ "O-RU attemted to calibrate its antenna, but the procedure failed.";
+ }
+ }
+ mandatory true;
+ description
+ "Status of the antenna calibration procedure which has been triggered
+ by accepting an start-antenna-calibration RPC.";
+ }
+ leaf detailed-reason {
+ when "../status='FAILURE'";
+ type string;
+ description
+ "Detailed reason when the status is FAILURE, e.g.,
+ O-RU cannot complete the antenna calibration
+ because of lack of memory, self-calibration failure, etc";
+ }
+ description
+ "This notification indicates the antenna calibration result";
+ }
+
+ notification antenna-calibration-multiple-time-resource-params {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ leaf antenna-calibration-time-resource-index {
+ type uint8;
+ description
+ "Index to use applicable antenna calibration time resources from the
+ list 'antenna-calibration-multiple-time-resource-list'";
+ }
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+
+ description
+ "This notification indicates sending parameters related to supporting antenna calibration
+ with multiple time resource";
+ }
+}
--- /dev/null
+module o-ran-beamforming {
+ yang-version 1.1;
+ namespace "urn:o-ran:beamforming:1.0";
+ prefix "o-ran-bf";
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the beamforming capabilities of an O-RU.
+ Only O-RUs that support beamforming shall support this module.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add DMRS-BF capabilities.
+ 2) add new capability to update beamforming configuration without deactive tx/rx-array-carrier ";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) clarifying descriptions inside capabilities-group.
+ 2) add support for multiple beamid tables.
+ 3) remove import by revision date for o-ran-compression-factors. ";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 11.1.0
+
+ 1) Added h(k) mapping ";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) introduce p-dash parameter";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 8.1.0
+
+ 1) clarified description statements for component carrier
+ 2) clarified path/folder description";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Configuration for Beamforming weights were added together with changes and updates
+ to compressions.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 2.3.0
+
+ 1) Ensuring beam-ids can only be 15 bits.
+ 2) Correcting maximum number of UEs from 8 bit to 15 bit";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+ revision "2021-03-22" {
+ description
+ "version 2.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 2.1.0
+
+ 1) corrected error where typedef refers to deprecated beam-id by
+ introducing new typedef and deprecating leafs defining coarse/fine
+ relationships that refer to beam-id and replacing with new ones based
+ on capability grouping";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) re-designed/switched from per band to per capabilities-group for
+ addition flexibility
+ 2) added in new beam tilt feature
+ 3) adding possibilities to provide more compression types for beamforming
+ 4) Adding possibility to configure beamforming per capabilities group
+ 5) corrected xPATH boolean check from TRUE to true";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature MODIFY-BF-CONFIG {
+ description
+ "This feature indicates that the O-RU supports an optional feature to
+ modify beamforming configuration information";
+ }
+
+ feature BEAM-TILT {
+ description
+ "This feature indicates that the O-RU supports an optional feature to
+ allows to shift beam characteristic of all predefined-beams in elevation
+ and/or azimuth direction (i.e. changing the service area or sector
+ coverage) while preserving the beam adjacency among the beams within
+ the service area ";
+ }
+
+ typedef EQ-SCALING-FUNCTION-TYPE{
+ type enumeration {
+ enum SCALING-F-1 {
+ description
+ "For scaling function 1, G = SINR/(1+SINR) ";
+ }
+ enum SCALING-F-2 {
+ description
+ "For scaling function 2, G = 1";
+ }
+ }
+
+ description
+ "DMRS-BF-EQ, scaling function type";
+ }
+
+ typedef beam-reference {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:per-band-config/o-ran-bf:beam-information/o-ran-bf:beamforming-properties/o-ran-bf:beam-id";
+ }
+ description
+ "This type is used by data models that need to reference a beam.";
+ }
+
+ typedef beam-capabilities-reference {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:beam-information/o-ran-bf:beamforming-properties/o-ran-bf:beam-id";
+ }
+ description
+ "This type is used by data models that need to reference a beam based on capability group.";
+ }
+
+ grouping beamforming-parameters {
+ leaf max-number-of-beam-ids {
+ type uint16 {
+ range "min .. 32767";
+ }
+
+ mandatory true;
+ description
+ "Maximum number of supported Beam ID assigned to domain beamforming control";
+ }
+
+ leaf initial-beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "First Beam ID that can be used for addressing of domain beams";
+ }
+
+ description "Group of common beamforming parameters";
+ }
+
+ grouping granularity-parameters {
+ leaf frequency-granularity {
+ type enumeration {
+ enum CC {
+ description
+ "Frequency granularity: per Component Carrier";
+ }
+
+ enum BAND {
+ description
+ "Frequency granularity: per band";
+ }
+ }
+ mandatory true;
+ description "Supported time granularity of time-domain beamforming.";
+ }
+
+ leaf time-granularity {
+ type enumeration {
+ enum SLOT {
+ description
+ "Time granularity: per slot";
+ }
+
+ enum SYMBOL {
+ description
+ "Time granularity: per symbol";
+ }
+ }
+ mandatory true;
+ description "Supported time granularity of time-domain beamforming.";
+ }
+ description "";
+ }
+
+ grouping array-lists {
+ description
+ "Grouping for array lists";
+
+ 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";
+ }
+ }
+
+ grouping static-properties {
+ description
+ "Defines static properties for real-time beamforming which apply to different beamforming types
+ i.e. time, frequency or hybrid beamforming type";
+
+ leaf rt-bf-weights-update-support {
+ type boolean;
+ description
+ "The parameter informs if O-RU supports real time beamforming weights update through C-Plane messaging";
+ }
+
+ choice beamforming-type {
+ case frequency {
+ container frequency-domain-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing frequency domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry. The index
+ values to be used for this list shall be restricted by O-RU advertised
+ values 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes'.";
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports beamforming in frequency domain.";
+ }
+
+ case time {
+ container time-domain-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses granularity-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing time-domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry.The index
+ values to be used for this list shall be restricted by O-RU advertised
+ valuues 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes'.";
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports beamforming in time domain.";
+ }
+
+ case hybrid {
+ container hybrid-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses granularity-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing hybrid-domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry.The index
+ values to be used for this list shall be restricted by O-RU advertised
+ values 'tx-array-beamId-table-indexes/rx-array-beamId table-indexes'.";
+ }
+
+ list fd-weights-mapping {
+ key "fd-weight-number";
+ description
+ "Mapping of array elements to frequency domain beamforming weight.
+ See h(k) in O-RAN CUS-Plane, clause 12.5.3";
+
+ leaf fd-weight-number {
+ type uint16;
+ description
+ "Frequency domain beamforming weight number.
+ See k' in O-RAN CUS-Plane, clause 12.5.3";
+ }
+
+ leaf-list array-elements {
+ type uint16;
+ description
+ "List of array elements mapped to the frequency domain beamforming weight number.
+ See k in O-RAN CUS-Plane, clause 12.5.3";
+ }
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports hybrid beamforming - in both time and frequency domain.";
+ }
+ description
+ "This value indicates beamforming type supported by O-RU";
+ }
+
+ leaf number-of-beams {
+ type uint16;
+ status deprecated;
+ description
+ "This value indicates the max number of beam patterns O-RU can generate
+ and apply to the signal of each O-RU port (both DL and UL).
+ This value is equivalent to the maximum number of used beam IDs within
+ a capability group for a specific beamforming type. This value can also
+ be interpreted as a difference between 'initial-beam-id' and 'max-number-of-beam-ids'
+ for each beamforming-type";
+ }
+
+ leaf p-dash {
+ type uint16;
+ description
+ "This parameters specifies the dimesionality of the time-domain beamforming operation. Refer to description of parameter p'
+ in clause 12.4.3.4.2 of CUS-Plane specification. This parameter is required to define the size of time-domain beamforming
+ vector in case of hybrid/time-domain beamforming is supported by O-RU";
+ }
+ }
+
+ grouping beamforming-property {
+ description
+ "Grouping for beamforming property";
+
+ leaf beam-type {
+ type enumeration {
+ enum COARSE {
+ description "the beam-id corresponds to a coarse beam";
+ }
+ enum FINE {
+ description "the beam-id corresponds to a fine beam";
+ }
+ }
+ description
+ "This value indicates the beam resolution.";
+ }
+
+ leaf beam-group-id {
+ type uint16;
+ description
+ "Beams with same beamGroupsID can be transmitted simultaneously.";
+ }
+
+ leaf-list coarse-fine-beam-relation {
+ type beam-reference;
+ status deprecated;
+ description
+ "List of related coarse/fine beam.";
+ }
+
+ leaf-list neighbour-beams {
+ type beam-reference;
+ status deprecated;
+ description
+ "A list of neighbour beams which might restrict co-scheduling due
+ to interference.";
+ }
+
+ leaf-list coarse-fine-beam-capability-based-relation {
+ type beam-capabilities-reference;
+ description
+ "List of related coarse/fine beam.";
+ }
+
+ leaf-list neighbour-beams-capability-based {
+ type beam-capabilities-reference;
+ description
+ "A list of neighbour beams which might restrict co-scheduling due
+ to interference.";
+ }
+ }
+
+ grouping beamforming-properties-element {
+ description
+ "Grouping for beamforming-properties element";
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ 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.";
+
+ uses beamforming-property;
+ }
+ }
+
+ grouping band-num {
+ description
+ "Band information for the beamforming
+ related to the band number from module capabilities";
+
+ 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";
+ }
+ }
+
+ grouping cap-group {
+ description
+ "Capabilities group grouping";
+
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number to which it refers.";
+ }
+
+ }
+
+ grouping per-band-config-element {
+ description
+ "Grouping for per band config element";
+
+ uses band-num;
+ uses array-lists;
+
+ container static-properties {
+ description
+ "the static beamforming related information";
+
+ uses static-properties;
+ }
+
+ container beam-information {
+ description
+ "Beam information which exposes beamforming related O-RU capabilities. Specifies beam properties for
+ predefined beamforming as described in clause 'Predefined-beam beamforming' of CUS-Plane specification";
+
+ 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 O-RU.
+ These parameters can be used by the beamforming control by the NETCONF client.
+ 'numberOfBeamformingProperties' indicates the size of the array.";
+
+ uses beamforming-properties-element;
+ }
+ }
+ }
+ grouping dmrs-bf-gen-capabilities {
+ description "Capabilities for DMRS-BF O-RU";
+ leaf equalization-data-scaling {
+ if-feature feat:DMRS-BF-EQ;
+ type EQ-SCALING-FUNCTION-TYPE;
+ description "Scaling function supported by this O-RU";
+ }
+ leaf max-num-ues-supported{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of UE supported by the O-RU using DMRS-BF";
+ }
+ leaf ueid-max-layer-bits{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint8 {
+ range "1 .. 4";
+ }
+ description
+ "Indicates the maximum number of bits in ueid to represent the layers of a UE";
+ }
+ leaf max-num-ueids{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of unique ueId values within the 'ueId' space that
+ may be used by the O-DU(s). The 'ueId' space ranges from ueId = 0 to ueId = U-1,
+ where U equals the product of the O-RU advertised parameter 'max-num-ues-supported'
+ and 2^ueid-layer-bits-configured configured by the O-DU. This limit counts all
+ unique ueId values used by the O-DU(s) at any time. Refer to CUS-Plane specification,
+ clause 7.5.3.10.";
+ }
+ }
+
+ grouping operational-properties {
+ description
+ "Grouping for operational properties";
+
+ leaf number-of-writeable-beamforming-files {
+ type uint8 {
+ range "1 .. max";
+ }
+ mandatory true;
+ description
+ "This leaf indicates the maximum number of writable beamforming files
+ containing beamweights and/or attributes that the O-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 O-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 O-RU supports the capability
+ to store the modified beamforming weight information file in the
+ reset persistent memory";
+ }
+
+ leaf in-service-bf-update {
+ when "../update-bf-non-delete = 'true'";
+ type boolean;
+ default false;
+ description
+ "When set to TRUE, indicates that an O-RU supports the capability
+ to apply the modified beamforming weight information by using RPC
+ activate-beamforming-config or activate-beamforming-config-by-capability-group without deactivating of tx-array-carriers and
+ rx-array-carriers.
+ when O-RU doesn't support the capability 'update-bf-non-delete',
+ the capability in-service-bf-update shall not be supported.";
+ }
+ }
+
+ grouping beamforming-supported-type {
+ description
+ "Grouping for type of beamforming supported";
+
+ leaf beamforming-trough-attributes-supported {
+ type boolean;
+ config false;
+ description
+ "Informs if beamforming can be controlled providing attributes to O-RU
+ (like angles, beamwidth).";
+ }
+
+ leaf beamforming-trough-ue-channel-info-supported {
+ type boolean;
+ config false;
+ description
+ "Informs if beamforming can be controlled by UE information.";
+ }
+ }
+
+ grouping beamforming-config {
+ description
+ "Grouping for beamforming configuration";
+
+ list per-band-config {
+ key band-number;
+ config false;
+ status deprecated;
+ description "beamforming information per band";
+ uses per-band-config-element;
+ }
+
+ list capabilities-groups {
+ key capabilities-group;
+ description
+ "Capabilities groups identification number assigned to be referenced by operations
+ and notifications.
+ This also help to group particular beamforming capabilities and bind it with arrays";
+
+ leaf capabilities-group {
+ type uint16;
+ description
+ "Capabilities group identification number. Number which is used just for reference in RPC
+ and notification";
+ }
+ uses per-band-config-element;
+ }
+
+ container ue-specific-beamforming {
+ presence
+ "Indicates that the O-RU supports optional Section Type '6' Fields
+ (used for sending channel information for a specific UE)";
+ config false;
+ description
+ "Information related to support by the O-RU of Section Type 6 for
+ signalling UE-specific channel information to the O-RU";
+
+ leaf max-number-of-ues {
+ type uint8;
+ status deprecated;
+ description
+ "Indicates the maximum number of UE -specific channel information
+ data sets supported by the O-RU.
+
+ Leaf is deprecated as it only enabled a maximum of 255 UEs to be supported,
+ compared with ST5 and ST6 which supports a 15 bit value.
+
+ NETCONF client instead uses max-number-ues-15bit schema node";
+ }
+ leaf max-number-of-ues-15bit {
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of UE -specific channel information
+ data sets supported by the O-RU,
+ It is restricted to 15 bits value because of the 15bits ueId field in ST5 and ST6";
+ }
+
+ leaf-list channel-information-compression-method-supported {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ type cf:ci-compression-method-def;
+ description
+ "list of channel information compression methods supported by the O-RU";
+ }
+
+ leaf dynamic-channel-information-compression-supported {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ type boolean;
+ description
+ "Informs if dynamic channel information compression supported by the O-RU,
+ if its value is true, the compression method and IQ bit width can be dynamic in ciCompHdr;
+ if its value is false, only static configuration compression configuration is supported, and ciCompHdr
+ shall be set to a fixed value corresponding to the static configured compression method and IQ bit width.";
+ }
+ }
+ container operational-properties {
+ if-feature MODIFY-BF-CONFIG;
+ config false;
+ description "properties for dynamic beam weight/attribute support";
+
+ uses operational-properties;
+ }
+ container dmrs-bf-general-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ config false;
+ description "general DMRS-BF capabilities";
+
+ uses dmrs-bf-gen-capabilities;
+ }
+ }
+
+ grouping beam-tilt-configuration {
+ description "grouping for beam-tilt feature";
+ list predefined-beam-tilt-offset {
+ if-feature BEAM-TILT;
+ key capabilities-group;
+ description "Configuration of the predefined-beam-tilt-offset per capabilities-group";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ require-instance false;
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-offset relates to";
+ }
+ leaf elevation-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units degrees;
+ default 0;
+ description
+ "Value 0 represents the default service area of the predefined-beams
+ in elevation domain, i.e. no tilt offset.
+
+ Values smaller than 0 represents an up-shift of the default service area
+ towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+ values larger than 0 represent a down-shift of the default service area
+ away from the zenith (i.e., corresponding to an increase in zenith angle).
+
+ If the value is greater than the maximum supported angle, then the maximum
+ angle is used for configuration.
+ If the value is less than the minimum supported angle, then the minimum
+ angle is used for configuration.
+ The actual angle used is (angle DIV granularity) * granularity.
+
+ Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+ its offset angle to its default value.";
+ }
+ leaf azimuth-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units degrees;
+ default 0;
+ description
+ "Value 0 represents the default service area of the predefined-beams
+ in azimuth domain, i.e., no tile offset.
+
+ Azimuth tilt offset angle, represents counter-clockwise rotation around
+ z-axis. I.e., assuming view from the UE (observation of the O-RU
+ from the front), value larger than 0 and smaller than 0
+ respectively represent right-shifted and left-shifted of the default
+ service area in azimuth domain.
+
+ If the value is greater than the maximum supported angle, then the maximum
+ angle is used for configuration.
+ If the value is less than the minimum supported angle, then the minimum
+ angle is used for configuration.
+ The actual angle used is (angle DIV granularity) * granularity.
+
+ Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+ its offset angle to its default value.";
+ }
+ }
+ }
+
+ grouping beam-tilt-state {
+ description
+ "Grouping for beam tilt state";
+
+ list predefined-beam-tilt-offset-information {
+ key capabilities-group;
+ config false;
+ description
+ "Information which exposes predefined-beam-tilt-offset related O-RU capabilities.";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-offset-information relates to";
+ }
+ leaf elevation-tilt-offset-granularity {
+ type uint8 {
+ range "0..30";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Indication of the supported granularity for the
+ predefined-beam-tilt-offset in elevation domain.
+
+ Value 0 represents that the O-RU doesn't support
+ the predefined-beam-tilt-offset in elevation domain.";
+ }
+ leaf azimuth-tilt-offset-granularity {
+ type uint8 {
+ range "0..30";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Indication of the supported granularity for the
+ predefined-beam-tilt-offset in azimuth domain.
+
+ Value '0' represents that the O-RU doesn't support
+ the predefined-beam-tilt-offset in azimuth domain.";
+ }
+ leaf minimum-supported-elevation-tilt-offset {
+ type int16 {
+ range "-90..0";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The minimum value which can be configured for
+ 'elevation-tilt-offset-angle'.";
+ }
+ leaf maximum-supported-elevation-tilt-offset {
+ type int16 {
+ range "0..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The maximum value which can be configured for
+ 'elevation-tilt-offset-angle'.";
+ }
+ leaf minimum-supported-azimuth-tilt-offset {
+ type int16 {
+ range "-90..0";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The minimum value which can be configured for
+ 'azimuth-tilt-offset-angle'.";
+ }
+ leaf maximum-supported-azimuth-tilt-offset {
+ type int16 {
+ range "0..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The maximum value which can be configured for
+ 'azimuth-tilt-offset-angle'.";
+ }
+ leaf run-time-tilt-offset-supported {
+ type boolean;
+ mandatory true;
+ description
+ "If 'run-time-tilt-offset-supported' is FALSE, changing the values in
+ 'predefined-beam-tilt-offset' for a specific band shall be allowed only
+ if all 'tx-array-carriers' and 'rx-array-carriers' corresponding
+ to the band are INACTIVE.";
+ }
+ }
+
+ }
+
+ grouping beam-tilt-report {
+ description
+ "Grouping for beam tilt report";
+
+ list predefined-beam-tilt-state {
+ key capabilities-group;
+ config false;
+ description
+ "Information which exposes state of predefined-beam-tilt-offset.";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-state relates to";
+ }
+ leaf elevation-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Value 'zero' represents the default service area of the
+ predefined-beams in elevation domain.
+
+ Values smaller than 0 represents an up-shift of the default service area
+ towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+ values larger than 0 represent a down-shift of the default service area
+ away from the zenith (i.e., corresponding to an increase in zenith angle).";
+ }
+ leaf azimuth-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Value 'zero' represents the default service area of the
+ predefined-beams in azimuth domain.
+
+ Azimuth tilt offset angle, represents counter-clockwise rotation around
+ z-axis. I.e., assuming view from the UE (observation of the O-RU from
+ the front), value larger than 'zero' and smaller than 'zero'
+ respectively represent right-shifted and left-shifted of the default
+ service area in azimuth domain.";
+ }
+ }
+
+ }
+
+ container beamforming-config {
+ config false;
+ description
+ "A set of configuration data for the O-RU's beam forming functionality";
+
+ uses beamforming-config;
+ uses beamforming-supported-type;
+ container beam-tilt {
+ if-feature BEAM-TILT;
+ description "container for pre-defined beam tilt feature";
+ uses beam-tilt-state;
+ uses beam-tilt-report;
+ }
+ }
+
+
+ rpc activate-beamforming-config {
+ if-feature MODIFY-BF-CONFIG;
+ description
+ "RPC to activate beamforming config information by indicating the file
+ stored in the folder o-ran/beamforming in advance";
+ input {
+ leaf beamforming-config-file {
+ type string;
+ mandatory true;
+ description
+ "file name stored in o-ran/beamforming folder is indicated";
+ }
+
+ uses band-num;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the beamforming weight/attribute file";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the beamforming weight/attribute file. The O-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.";
+ }
+ }
+ }
+
+ rpc activate-beamforming-config-by-capability-group {
+ if-feature MODIFY-BF-CONFIG;
+ description
+ "RPC to activate beamforming config information by indicating the file
+ stored in the folder o-ran/beamforming in advance";
+ input {
+ leaf beamforming-config-file {
+ type string;
+ mandatory true;
+ description
+ "file name stored in o-ran/beamforming folder is indicated";
+ }
+
+ uses cap-group;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the beamforming weight/attribute file";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the beamforming weight/attribute file. The O-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.";
+ }
+ }
+ }
+
+
+ rpc modify-predefined-beam-tilt-offset {
+ if-feature BEAM-TILT;
+ description
+ "RPC to trigger the modification of the predefined beam tilt offset";
+ input {
+ uses beam-tilt-configuration;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the predefind beamtilt offset configuration";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the predefind beamtilt offset configuration.";
+ }
+ }
+ mandatory true;
+ description "Status of acceptance of pre-defined beamtilt offset configuration";
+ }
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "Detailed error message when the pre-defined beam tilt configuration
+ is rejected, e.g., used when 'run-time-tilt-offset-supported' is FALSE and the
+ NETCONF client is attempting to modify the beam tilt on a band where
+ one or more array-carriers are still ACTIVE.";
+ }
+ }
+ }
+
+
+ //notification statement
+ notification beamforming-information-update {
+ uses band-num;
+ description
+ "this notification indicates that the beamforming properties are updated for particular band";
+ }
+
+ notification capability-group-beamforming-information-update {
+ uses cap-group;
+ description
+ "this notification indicates that the beamforming properties are updated for particular band
+ or capability group";
+ }
+
+ notification predefined-beam-tilt-offset-complete {
+ if-feature BEAM-TILT;
+ uses beam-tilt-report;
+ description
+ "this notification indicates that the re-generation of the predefined
+ beams is completed";
+ }
+}
--- /dev/null
+module o-ran-c-plane-tnl{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:c-plane-tnl:1.0";\r
+ prefix "o-ran-c-tnl";\r
+ \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module defines the YANG definitions for Transport Network Layer (TNL)\r
+ configuration for C-plane end-points at O-DU and O-CU. This module is to be \r
+ used to augment 3GPP SA5 data models.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ typedef dscp-marking-value {\r
+ type uint8 {\r
+ range "0..63";\r
+ }\r
+ description "type definition for DSCP marking";\r
+ }\r
+ \r
+ grouping dscp-marking {\r
+ leaf c-plane-dscp {\r
+ type dscp-marking-value;\r
+ mandatory true;\r
+ description "dscp-marking for F1-C, X2-C, Xn-C, NG-C or E1 traffic";\r
+ } \r
+ description "grouping of DSCP marking";\r
+ }\r
+\r
+ \r
+ grouping sctp-configuration {\r
+ container sctp-configuration {\r
+ leaf association-hbt-interval {\r
+ type uint8 {\r
+ range "0..60";\r
+ }\r
+ default 30;\r
+ description "SCTP association heart-beat interval";\r
+ }\r
+ leaf max-burst {\r
+ type uint8 {\r
+ range "2..8";\r
+ }\r
+ default 4;\r
+ description "SCTP max burst";\r
+ }\r
+ leaf association-max-retries {\r
+ type uint8 {\r
+ range "1..30"; \r
+ }\r
+ default 10;\r
+ description "SCTP association max retries";\r
+ }\r
+ leaf rto-initial {\r
+ type uint16 {\r
+ range "10..60000"; \r
+ }\r
+ default 3000;\r
+ description "SCTP RTO expiry timer initial value";\r
+ }\r
+ leaf rto-max {\r
+ type uint16 {\r
+ range "10..60000"; \r
+ }\r
+ default 60000;\r
+ description "SCTP RTO expiry timer max value";\r
+ } \r
+ leaf rto-min {\r
+ type uint16 {\r
+ range "10..60000"; \r
+ }\r
+ default 1000;\r
+ description "SCTP RTO expiry timer min value";\r
+ } \r
+ leaf ack-delay {\r
+ type uint16 {\r
+ range "20..500"; \r
+ }\r
+ default 200;\r
+ description "SCTP ACK delay time";\r
+ } \r
+ leaf ack-frequency {\r
+ type uint8 {\r
+ range "1..25"; \r
+ }\r
+ default 5;\r
+ description "SCTP ACK frequency";\r
+ } \r
+ leaf cookie-life {\r
+ type uint16 {\r
+ range "1..60000"; \r
+ }\r
+ default 60;\r
+ description "SCTP cookie life value";\r
+ } \r
+ leaf path-max-retransmits {\r
+ type uint8 {\r
+ range "1..30"; \r
+ }\r
+ default 5;\r
+ description "SCTP path max retransmits value";\r
+ } \r
+ leaf max-init-retransmits {\r
+ type uint8 {\r
+ range "1..30"; \r
+ }\r
+ default 8;\r
+ description "SCTP max INIT retransmits";\r
+ } \r
+ description "container for SCTP configuration"; \r
+ }\r
+ description "grouping SCTP configurations"; \r
+ } \r
+ \r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-certificates {
+ yang-version 1.1;
+ namespace "urn:o-ran:certificates:1.0";
+ prefix "o-ran-cert";
+
+ import ietf-x509-cert-to-name {
+ prefix x509c2n;
+ reference
+ "RFC 7407: A YANG Data Model for SNMP Configuration";
+ }
+
+ import ietf-truststore {
+ prefix ietf-ts;
+ }
+
+ import ietf-keystore {
+ prefix ietf-ks;
+ }
+
+ import ietf-system {
+ prefix ietf-sys;
+ }
+
+ import ieee802-dot1x {
+ prefix dot1x;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the certificates model for the O-RAN Equipment authorization.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) augmentation of dot1x:pae-system to configure PAE credential.
+ 2) add certificate lifecycle management";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ grouping cert-maps {
+ uses x509c2n:cert-to-name;
+ description
+ "The cert-maps container is used by a TLS-
+ based NETCONF server to map the NETCONF
+ client's presented X.509 certificate to
+ a NETCONF username. If no matching and
+ valid cert-to-name list entry can be found,
+ then the NETCONF server MUST close the
+ connection, and MUST NOT accept NETCONF
+ messages over it.
+ Note - when included, the /cert-to-name/name refers to the schema node
+ users/user/name in o-ran-usermgmt.yang";
+ reference
+ "RFC 7407: NETCONF over TLS, Section 7";
+ }
+
+ grouping cert-exp-policy {
+ description "Configuration related to policies to be applied for certficate expiry";
+ leaf cert-lcm-policy {
+ type enumeration {
+ enum REISSUE_ON_DEMAND {
+ description
+ "When this policy is set, the O-RU shall:
+ a. Generate a public/private key pair whenever the
+ O-RU controller invokes <generate-csr> action statement on
+ the asymmetric-keys. The key length and algorithm
+ to be used are derived from SubjectPublicKeyInfo in
+ the csr-info field of the <generate-csr> action.
+ b. Initiate certificate signing request towards
+ the CA/RA server using CMPv2 whenever the O-RU controller
+ invokes the <generate-csr> action statement on
+ the asymmetric-keys, and get a reissued certificate";
+ }
+ }
+ description
+ "Configuration for the policy to be applied
+ for certificate lifecycle management";
+ }
+ }
+ grouping certificate-lcm-group-notif {
+ description "Grouping for parameters notified in certificate-lcm notification";
+ leaf certificate-name {
+ type leafref {
+ path "/ietf-ks:keystore/ietf-ks:asymmetric-keys/ietf-ks:asymmetric-key/ietf-ks:certificates/ietf-ks:certificate/ietf-ks:name";
+ }
+ description
+ "Reference to certificate that was re-issued. This should correspond to the certReqId provided in the CMPv2 IR/CR message.";
+ }
+ leaf cmpv2-procedure {
+ type enumeration {
+ enum INITIALIZATION_REQUEST {
+ description
+ "An Intitialization Request/Initialization Response procedure";
+ }
+ enum CERTIFICATION_REQUEST {
+ description
+ "A successful Certificate Request/Certificate Response procedure. If certification procedure (cp)
+ completes successfully during polling also, this cmpv2-procedure shall be included in the notification.";
+ }
+ enum POLLING_REQUEST {
+ description
+ "A Polling Request/Polling Response procedure. This procedure shall be included in the notification
+ only if the polling request is responded with a polling reponse having a PKIStatus of 3 (waiting)";
+ }
+ }
+ mandatory true;
+ description
+ "Identifies the CMPv2 procedure that has been completed";
+ }
+ leaf pki-status {
+ type uint8;
+ mandatory true;
+ description "The value of the PKIStatus from the CMPv2 response";
+ }
+ leaf-list pki-failure-info {
+ when "../pki-status = '2'";
+ type uint8 {
+ range "0..26";
+ }
+ description
+ "The failure case information derived from the PKIFailureInfo
+ from the CMPv2 response, where the uint8 value corresponds to
+ the bit position in PKIFailureInfo, i.e., a value of '0' encodes
+ badAlg and a value of '1' encodes badMessageCheck.";
+ }
+ leaf pki-free-text {
+ type string;
+ description "The text information returned by the CA/RA server";
+ }
+ }
+
+ container certificate-parameters {
+ description
+ "Top Level Container for all certificate related parameters";
+
+ container cert-maps {
+ description
+ "Container for certificate maps";
+
+ uses cert-maps;
+ }
+
+ container cert-expiry-policy {
+ description
+ "Container for configuration the certificate expiry policy";
+ uses cert-exp-policy;
+ }
+
+ container advance-cert-expiry-alarms-config {
+ description
+ "Container for configuration of advance alarms
+ for certificate expiry";
+
+ leaf minor-alarm-advance-time {
+ type uint16;
+ units days;
+ default 30;
+ description
+ "Number of days in advance, a minor alarm for certificate
+ about to expire needs to be raised";
+ }
+ leaf major-alarm-advance-time {
+ type uint16;
+ units days;
+ default 10;
+ description
+ "Number of days in advance, a major alarm for certificate
+ about to expire needs to be raised";
+ }
+ leaf critical-alarm-advance-time {
+ type uint16;
+ units days;
+ default 2;
+ description
+ "Number of days in advance, a critical alarm for certificate
+ about to expire needs to be raised";
+ }
+ }
+ }
+
+ notification certificate-lcm {
+ description
+ "Notification sent on successful CMPv2 procedure";
+ uses certificate-lcm-group-notif;
+ }
+
+ augment "/ietf-sys:system/dot1x:pae-system" {
+ if-feature "ietf-ts:certificates";
+ description
+ "Augment 802.1X PAE System with EAP-TLS credential information.";
+
+ container credential {
+ description
+ "Contain the credential configuration to be used with the PAE.";
+
+ leaf ca-root {
+ type leafref {
+ path "/ietf-ts:truststore/ietf-ts:certificate-bags/ietf-ts:certificate-bag/ietf-ts:name";
+ }
+ description
+ "The name of the trust anchor to be used in the EAP-TLS exchange.";
+ }
+ leaf client-cert {
+ type leafref {
+ path "/ietf-ks:keystore/ietf-ks:asymmetric-keys/ietf-ks:asymmetric-key/ietf-ks:certificates/ietf-ks:certificate/ietf-ks:name";
+ }
+ description
+ "The name of the client certificate to be used in the EAP-TLS exchange.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-common-identity-refs {
+ yang-version 1.1;
+ namespace "urn:o-ran:wg1identityref:1.0";
+ prefix "o-ran-iref";
+
+ import iana-hardware {
+ prefix ianahw;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines a set of re-usable identity references, that can be
+ re-used across O-RAN working groups.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.1.0
+
+ 1) style guide corrections";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2020-11-01" {
+ description
+ "version 1.0.0
+
+ 1) initial verstion.";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ // O-RAN functional identity types
+
+ identity o-ran-function-base {
+ description
+ "Base identity from which all O-RAN defined functions are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-ru-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to an O-RAN O-RU Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-du-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to all O-RAN O-DU Functions.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to all O-RAN O-CU Functions.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-up-function {
+ base "o-cu-function";
+ description
+ "an identity corresponding to an O-RAN O-CU UP Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-cp-function {
+ base "o-cu-function";
+ description
+ "an identity corresponding to an O-RAN O-CU CP Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN radio technology identity types
+
+ identity o-ran-radio-technology-base {
+ description
+ "Base identity for O-RAN defined radio technology types.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity new-radio-technology {
+ base "o-ran-radio-technology-base";
+ description
+ "An identity corresponding to new radio technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity lte-technology {
+ base "o-ran-radio-technology-base";
+ description
+ "An identity corresponding to lte technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity nb-iot {
+ base "lte-technology";
+ description
+ "An identity corresponding to nb-iot technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN Transport technology identity types
+
+ identity o-ran-transport-technology-base {
+ description
+ "Base identity from which all O-RAN defined transport technology identities are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN Fronthaul transport identity types
+
+ identity o-ran-fronthaul-transport-base {
+ description
+ "Base identity from which all O-RAN defined fronthaul transports are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity ethernet-fronthaul-transport {
+ base "o-ran-fronthaul-transport-base";
+ description
+ "an identity corresponding to fronthaul transport using ethernet based flows.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // Hardware component identity types
+
+ identity o-ran-module {
+ base ianahw:module;
+ description
+ "Any O-RAN module that represents a self-contained sub-system.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-ran-hardware-class {
+ base ianahw:hardware-class;
+ description
+ "This identity corresponding to a generic O-RAN hardware class.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity fpga {
+ base o-ran-hardware-class;
+ description
+ "Represent an FPGA.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+}
--- /dev/null
+module o-ran-common-yang-types {
+ yang-version 1.1;
+ namespace "urn:o-ran:common-yang-types:1.0";
+ prefix "o-ran-types";
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ organization "O-RAN Alliance";
+
+
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines ORAN common YANG types.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 2.0.0
+
+ 1) New availability status typedef";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 1.1.0
+
+ 1) style guide corrections";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2020-10-10" {
+ description
+ "version 1.0.0
+
+ 1) Initial creation";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ typedef version {
+ type string {
+ pattern '[0-9]+(\.[0-9]+){1,2}';
+ }
+ description
+ "Definition used to represent a version of an interface.";
+ }
+
+ typedef timezone-name {
+ type string;
+ description
+ "A time zone name as used by the Time Zone Database,
+ sometimes referred to as the 'Olson Database'.
+
+ The complete set of valid values is defined in
+ https://www.iana.org/time-zones.
+
+ The exact set of supported values is an
+ implementation-specific matter.";
+
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database
+ IANA Time Zone Database https://www.iana.org/time-zones ";
+ }
+
+ typedef protocol {
+ type enumeration {
+ enum ECPRI {
+ description
+ "Indicates that an O-RU supports the ecpri header format
+ for the C/U plane";
+ }
+ enum IEEE-1914-3 {
+ description
+ "Indicates that an O-RU supports the 1914.3 header format
+ for the C/U plane";
+ }
+ }
+ description "the type of C/U plane protocol";
+ }
+
+ typedef duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+
+ typedef 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";
+ }
+ }
+ description "the active status of a carrier";
+ }
+
+ typedef state {
+ type enumeration {
+ enum DISABLED {
+ description
+ "Array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "Array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "Array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ description "the state on an array carrier";
+ }
+
+ typedef transport-session {
+ type enumeration {
+ enum ETHERNET {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDP_IP {
+// if-feature o-ran-int:UDPIP-BASED-CU-PLANE; How to handle enum value constrained by feature defined in o-ran-interface.yang?
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIAS_MAC{
+// if-feature o-ran-int:ALIASMAC-BASED-CU-PLANE; How to handle enum value constrained by feature defined in o-ran-interface.yang?
+ description "Alias MAC address based CUS Transport ";
+ }
+ enum SHARED_CELL {
+// if-feature o-ran-elements:SHARED_CELL; How to handle enum value constrained by feature defined in o-ran-processing-element.yang?
+ description "VLAN based CUS Transport used for Shared Cell scenario";
+ }
+ }
+ description "the transport session type";
+ }
+
+ typedef netconf-client-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A NETCONF client identifier";
+ }
+
+ typedef ca-ra-server-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A CA/RA Server identifier";
+ }
+
+ typedef segw-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A SeGW identifier";
+ }
+
+ 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";
+ }
+
+ typedef vlan-id {
+ 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 geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ typedef prach-preamble-format {
+ type enumeration {
+ enum LTE-0 {
+ description
+ "LTE PRACH Preamble format 0";
+ }
+ enum LTE-1 {
+ description
+ "LTE PRACH Preamble format 1";
+ }
+ enum LTE-2 {
+ description
+ "LTE PRACH Preamble format 2";
+ }
+ enum LTE-3 {
+ description
+ "LTE PRACH Preamble format 3";
+ }
+ enum LTE-4 {
+ description
+ "LTE PRACH Preamble format 4";
+ }
+ enum LTE-NB0 {
+ description
+ "LTE Narrowband PRACH format 0";
+ }
+ enum LTE-NB1 {
+ description
+ "LTE Narrowband PRACH format 1";
+ }
+ enum NR-0 {
+ description
+ "5GNR PRACH Preamble format 0";
+ }
+ enum NR-1 {
+ description
+ "5GNR PRACH Preamble format 1";
+ }
+ enum NR-2 {
+ description
+ "5GNR PRACH Preamble format 2";
+ }
+ enum NR-3 {
+ description
+ "5GNR PRACH Preamble format 3";
+ }
+ enum NR-A1 {
+ description
+ "5GNR PRACH Preamble format A1";
+ }
+ enum NR-A2 {
+ description
+ "5GNR PRACH Preamble format A2";
+ }
+ enum NR-A3 {
+ description
+ "5GNR PRACH Preamble format A3";
+ }
+ enum NR-B1 {
+ description
+ "5GNR PRACH Preamble format B1";
+ }
+ enum NR-B2 {
+ description
+ "5GNR PRACH Preamble format B2";
+ }
+ enum NR-B3 {
+ description
+ "5GNR PRACH Preamble format B3";
+ }
+ enum NR-B4 {
+ description
+ "5GNR PRACH Preamble format B4";
+ }
+ enum NR-C0 {
+ description
+ "5GNR PRACH Preamble format C0";
+ }
+ enum NR-C2 {
+ description
+ "5GNR PRACH Preamble format C2";
+ }
+ enum LTE-NB0-a {
+ description
+ "LTE Narrowband PRACH format 0-a";
+ }
+ enum LTE-NB1-a {
+ description
+ "LTE Narrowband PRACH format 1-a";
+ }
+ enum LTE-NB2 {
+ description
+ "LTE Narrowband PRACH format 2";
+ }
+ }
+
+ description
+ "PRACH preamble format definition";
+ }
+
+ typedef polarisation_type {
+ type enumeration {
+ enum MINUS_45 {
+ description "MINUS_45";
+ }
+ enum ZERO {
+ description "ZERO";
+ }
+ enum PLUS_45 {
+ description "PLUS_45";
+ }
+ enum PLUS_90 {
+ description "PLUS_90";
+ }
+ }
+ description "Type definition for polarisations";
+ }
+
+ typedef 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";
+ }
+
+ typedef scs-config-type {
+ 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_3_75 {
+ value 13;
+ description
+ "3.75kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ enum KHZ_7_5 {
+ value 15;
+ description
+ "7.5kHz sub carrier spacing";
+ }
+ }
+
+ description
+ "Scs configuration type definition";
+ }
+
+ typedef availability-status {
+ type union {
+ type empty;
+ type enumeration {
+ enum FAILED {
+ description
+ "The resource has an internal fault that prevents it from operating.
+ The operational state is disabled.";
+ }
+ enum DEPENDENCY {
+ description
+ "The resource cannot operate because some other resource on which it
+ depends is unavailable. The operational state is disabled.";
+ }
+ }
+ }
+ description
+ "When the value of this attribute is empty set, this implies that none of
+ the status conditions described in the enumerations are present. Only current relevant status for M-plane defined are listed here";
+ reference "CCITT Rec. X.731 (1992 E) 8.1.2.3";
+ }
+
+}
--- /dev/null
+module o-ran-compression-factors {
+ yang-version 1.1;
+ namespace "urn:o-ran:compression-factors:1.0";
+ prefix "o-ran-compression-factors";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit U-Plane configuration.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) Clarify handling of deprecated leaf compression-format.
+ 2) Add in SINR compression details";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) New compression methods BFP-SRES-MASK-IN-SEC-HEADER and MOD-SRES-MASK-IN-SEC-HEADER.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Configuration for Beamforming weights were added together with changes
+ and updates to compressions.
+ 3) add new beamspace compression enumeration for BEAMSPACE_TYPEII.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 4.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) supporting compression types per endpoint
+ 2) adding feature for configurable fs-offset for compression";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) adding selective RE sending compression types";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) changes related to compression bit-width presentation";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature CONFIGURABLE-FS-OFFSET {
+ description
+ "Presence of this feature means that O-RU supports configurable fs-offset for compression.";
+ }
+
+ typedef ci-compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+
+ 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";
+ }
+ }
+ description
+ "Available compression methods for channel information (e.g., ST6).";
+ }
+
+ typedef compression-type-def {
+ type enumeration {
+ enum STATIC {
+ description
+ "Indicates that static compression method will be used (both compression and IQ bitwidth)";
+ }
+ enum DYNAMIC {
+ description
+ "Indicates that dynamic compression method will be used";
+ }
+ }
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ typedef bf-compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+ 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 VOID_1 {
+ description
+ "Leftover of modulation, not to be used for beamforming weights";
+ }
+
+ enum VOID_2 {
+ description
+ "Leftover of block-floating-point-selective-re-sending, not to be used for beamforming weights";
+ }
+
+ enum VOID_3 {
+ description
+ "Leftover of modulation-compression-selective-re-sending, not to be used for beamforming weights";
+ }
+
+ enum BEAMSPACE_TYPEII {
+ description
+ "Beamspace compression typeII and decompression will be used ";
+ }
+ }
+ description
+ "Available compression methods for beamforming weights.";
+ }
+
+ typedef compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression";
+ }
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression method";
+ }
+
+ enum BLOCK_SCALING {
+ description
+ "Block scaling compression and decompresion method";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompresion method";
+ }
+
+ enum VOID_1 {
+ description
+ "Leftover of beamspace, not to be used for IQ data.";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression method";
+ }
+
+ enum BLOCK-FLOATING-POINT-SELECTIVE-RE-SENDING {
+ description
+ "block floating point with selective re sending
+ compression and decompression method";
+ }
+
+ enum MODULATION-COMPRESSION-SELECTIVE-RE-SENDING {
+ description
+ "modulation compression with selective re sending
+ compression and decompression method";
+ }
+ enum BFP-SRES-MASK-IN-SEC-HEADER {
+ description
+ "block floating point with selective re sending
+ compression and decompression method with selective re sending mask in the section header ";
+ }
+
+ enum MOD-SRES-MASK-IN-SEC-HEADER {
+ description
+ "modulation compression with selective re sending
+ compression and decompression method with selective re sending mask in the section header";
+ }
+ }
+ description
+ "Available compression methods for the data.";
+ }
+
+ typedef sinr-compression-method-def {
+ type enumeration {
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression will be used";
+ }
+
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+ }
+ description
+ "Available compression methods for the SINR.";
+ }
+
+ grouping compression-method-grouping {
+ description
+ "Grouping for compression method.";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bit-width to be used in compression";
+ }
+
+ leaf compression-method {
+ type compression-method-def;
+ description
+ "Compression method which can be supported by the O-RU";
+ }
+ }
+
+ grouping compression-details {
+ description "";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bitwidth to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ leaf compression-method {
+ type compression-method-def;
+ description
+ "Compression method which can be supported by the O-RU";
+ }
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping bf-compression-details {
+ description "Compression formats defined for beamforming";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bitwidth to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ leaf compression-method {
+ type bf-compression-method-def;
+ description
+ "Compression method which can be supported by the beamforming";
+ }
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping sinr-compression-details {
+ description "Compression formats defined for SINR";
+
+ leaf sinr-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf sinr-compression-method {
+ type sinr-compression-method-def;
+ description
+ "Compression method which can be supported by the SINR.";
+ }
+
+ leaf sinr-block-size {
+ type uint8;
+ description
+ "Block size used for reporting SINR.
+ If the parameter is absent, then the SINR values are sent without zero-padding
+ i.e., the block size is equal to the number of SINR values
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ }
+ }
+
+// *********** Deprecated ***********
+
+ grouping compression-formats {
+ status deprecated;
+ description
+ "Grouping deicated to list compression formats as choice.";
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping compresion-format-grp {
+ status deprecated;
+ description
+ "Grouping to for compression format choice";
+
+ choice compression-format {
+ status deprecated;
+ description
+ "Choice of compression format for particular element.
+ Note: This method is deprecated. All should be done as emumeration as details are configured
+ by udCompHdr in CU-Plane messaging.
+ NOTE: Changing the configuration from any compression format to no compression would require
+ a delete-config followed by an edit-config";
+
+ case no-compresison {
+ description "Compression for beam weights is not supported.";
+ }
+
+ case block-floating-point {
+ description "Block floating-point compression and decompression is supported.";
+
+ leaf exponent {
+ type uint8 {
+ range "4";
+ }
+ description "Exponent bit width size in number of bits used when encoding in udCompParam.";
+ }
+ }
+
+ case block-floating-point-selective-re-sending {
+ description
+ "Block floating-point with selective re sending compression and decompression is supported.";
+
+ leaf sres-exponent {
+ type uint8 {
+ range "4";
+ }
+ description "Exponent bit width size in number of bits used when encoding in udCompParam.";
+ }
+ }
+
+ case block-scaling {
+ description "Block scaling compression and decompression is supported.";
+ leaf block-scalar {
+ type uint8;
+ description
+ "Common scaler for compressed PRB";
+ }
+ }
+
+ case u-law {
+ description "u-Law compression and decompression method is supported.";
+ leaf comp-bit-width {
+ type uint8 {
+ range "0..15";
+ }
+ description "Bit with for u-law compression";
+ }
+ leaf comp-shift {
+ type uint8 {
+ range "0..15";
+ }
+ description
+ "the shift applied to the entire PRB";
+ }
+ }
+
+ case beam-space-compression {
+ description "Beamspace compression and decompression is supported. Applies to beamforming weights only.";
+ leaf-list active-beam-space-coeficient-mask {
+ type uint8;
+ description
+ "active beamspace coefficient indices associated with the compressed beamforming vector";
+ }
+ leaf block-scaler {
+ type uint8;
+ description
+ "Common scaler for compressed beamforming coefficients";
+ }
+ }
+
+ case modulation-compression {
+ description "Modulation compression and decompression is supported.";
+ leaf csf {
+ type uint8 {
+ range "0..1";
+ }
+ description "Constellation shift flag";
+ }
+
+ leaf mod-comp-scaler {
+ type uint16 {
+ range "0..32767";
+ }
+ description "Modulation compression scaler value.";
+ }
+ }
+
+ case modulation-compression-selective-re-sending {
+ description "Modulation compression with selective re sending and decompression is supported.";
+ leaf sres-csf {
+ type uint8 {
+ range "0..1";
+ }
+ description "Constellation shift flag";
+ }
+
+ leaf sres-mod-comp-scaler {
+ type uint16 {
+ range "0..32767";
+ }
+ description "Modulation compression scaler value.";
+ }
+ }
+
+ }
+ }
+
+ grouping compression-params {
+ status deprecated;
+ description
+ "Parameters to define compression";
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bit-width to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ uses compression-formats {
+ status deprecated;
+ }
+ }
+
+ grouping compression-parameters {
+ status deprecated;
+ description
+ "Parameters used to define description type";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bit-width to be used in compression";
+ }
+
+ uses compression-formats {
+ status deprecated;
+ }
+ }
+
+ grouping format-of-iq-sample {
+ status deprecated;
+ description
+ "Indicates module capabilities about IQ samples";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if radio supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if O-RU supports real-time variable bit with";
+ }
+
+ list compression-method-supported {
+ status deprecated;
+ uses compression-parameters {
+ status deprecated;
+ }
+
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer do endpoints to have information what
+ exactly is supported on a particular endpoint";
+ }
+
+ leaf syminc-supported {
+ type boolean;
+
+ description
+ "Informs if symbol number increment command in a C-Plane is
+ supported or not";
+ }
+
+ leaf regularization-factor-se-supported {
+ type boolean;
+
+ description
+ "Informs if regularizationFactor in section type 5 is
+ supported(true) or not(false)";
+ }
+
+ leaf little-endian-supported {
+ type boolean;
+ default false;
+
+ description
+ "All O-RUs support bigendian byte order. This node informs if module supports the
+ the optional capability for little endian byte order for C/U plane data flows.
+
+ Note - little endian support does not invalidate bigendian support.";
+ }
+ }
+
+// *********** Deprecated End ***********
+
+}
--- /dev/null
+module o-ran-cti-common {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:cti-common:2.0";\r
+ prefix "or-ctic";\r
+\r
+ import ietf-yang-types {\r
+ prefix yang;\r
+ }\r
+\r
+ import ietf-inet-types {\r
+ prefix inet;\r
+ }\r
+\r
+ import ietf-ip {\r
+ prefix ip;\r
+ }\r
+\r
+ import ietf-interfaces {\r
+ prefix if;\r
+ }\r
+\r
+ import o-ran-common-yang-types {\r
+ prefix or-types;\r
+ }\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the common groupings used by configuration management\r
+ model for the O-RAN WG4 Cooperative Transport Interface.\r
+\r
+ Note - this module comprises a number of re-usable groupings.\r
+ It has been designed to be agnostic to model specific 'style-guides' used by\r
+ the 'importing models', enabling the groupings to be incorporated into models\r
+ defined externally to O-RAN Alliance (e.g., BBF and CableLabs) as well as\r
+ incorporated into O-RAN alliance defined models.\r
+\r
+ Copyright 2023 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2023-03-17" {\r
+ description\r
+ "version 4.0.0\r
+\r
+ Update to IM as per CTI TMP v4";\r
+\r
+ reference "ORAN-WG4.CTI-TMP.0-v04.00";\r
+ }\r
+\r
+ revision "2022-04-15" {\r
+ description\r
+ "version 3.0.0\r
+\r
+ 1) non-backward compatible changes to switch to camelCase";\r
+\r
+ reference "ORAN-WG4.CTI-TMP.0-v03.00";\r
+ }\r
+\r
+ typedef ethertype {\r
+ type uint16;\r
+ description\r
+ "An ethertype value";\r
+ }\r
+\r
+ typedef ctiVersion {\r
+ type uint8 {\r
+ range "0..15";\r
+ }\r
+ description\r
+ "The version of CTI TC-Plane or TM-Plane.";\r
+ }\r
+\r
+ typedef localIpv4OrIpv6 {\r
+ type union {\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/ip:ipv4/ip:address/ip:ip";\r
+ }\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/ip:ipv6/ip:address/ip:ip";\r
+ }\r
+ }\r
+ description "Local IPv4 or IPv6 address for CTI Server";\r
+ }\r
+\r
+ grouping ctiTimersGrp {\r
+ description "a grouping for CTI timers";\r
+ leaf ctiKa {\r
+ type uint8;\r
+ units 0.1-seconds;\r
+// RFC 8407 top level container comment is removed\r
+ mandatory true;\r
+ description\r
+ "This value, abbreviated as ctiKa, is the maximum time interval between consecutive\r
+ CTI-Keep-Alive messages between the CTI client and the CTI server. Example value is 30.";\r
+ }\r
+ leaf ctiTo {\r
+ type uint8;\r
+ units 0.1-seconds;\r
+// RFC 8407 top level container comment is removed\r
+ mandatory true;\r
+ description\r
+ "This value, abbreviated as ctiTo, is the timeout value that a CTI-Beacon-Ack message\r
+ needs to be received by the CTI client (O-DU) or the CTI server (transport system)\r
+ before that respective system suspends CTI operations and returns to its CTI configuration\r
+ state. Example value is 100.";\r
+ }\r
+ }\r
+\r
+ grouping ctiPatternGrp {\r
+ description "a grouping for CTI pattern";\r
+ leaf patternId {\r
+ type uint32 {\r
+ range "0..16777215";\r
+ }\r
+ mandatory true;\r
+ description\r
+ "An integer representing a 24 bit value that uniquely identifies a CTI pattern.\r
+ A pattern-id of 0 means all data is spread equally in time, see spec for details";\r
+ }\r
+ leaf patternDuration {\r
+ type uint8;\r
+ units 125-microseconds;\r
+ mandatory true;\r
+ description "The length of a single mobile slot time, in units of 125 micorseconds";\r
+ }\r
+ leaf patternEvents {\r
+ type uint8;\r
+ mandatory true;\r
+ description\r
+ "This is the number of events per pattern. An event is typically a symbol or a\r
+ group of symbols within a slot. For example, if a slot contained 14 symbols,\r
+ there could be 14 events with each being one symbol or 7 events with each\r
+ being 2 symbols";\r
+ }\r
+ leaf patternEventMultiplier {\r
+ type uint8;\r
+ mandatory true;\r
+ description\r
+ "The number of sequential events that have the same byte count. The multipler\r
+ variable and the byte count variable are repeated as a pair to describe an event";\r
+ }\r
+ leaf patternEventBytes {\r
+ type uint16;\r
+ mandatory true;\r
+ description\r
+ "This is the number of bytes per event. A byte count is allowed to be 0 bytes.\r
+ A reserved value of 0xFFFF (65535) indicates a residual average, where:\r
+ Residual average\r
+ = [ CTI byte count - sum(explicit bytes described) ] /sum(events without explicit bytes described)";\r
+ }\r
+ leaf patternNormalization {\r
+ type boolean;\r
+ mandatory true;\r
+ description\r
+ "Whether or not to normalize the values of pattern-event-bytes\r
+ so that their sum per reported interval is always the same fixed value";\r
+ }\r
+ }\r
+\r
+ grouping layer2FilterGrp {\r
+ description "a grouping for a layer 2 CTI flow filters identifying fronthaul traffic";\r
+ leaf sourceMac {\r
+ type yang:mac-address;\r
+ description "an optional source MAC address filter ";\r
+ }\r
+ leaf destinationMac {\r
+ type yang:mac-address;\r
+ description "an optional desination MAC address filter";\r
+ }\r
+ leaf ethertype {\r
+ type ethertype;\r
+ description "an optional ethertype filter";\r
+ }\r
+ leaf pcp {\r
+ type or-types:pcp;\r
+ description "an optional PCP filter";\r
+ }\r
+ leaf vlanId {\r
+ type or-types:vlan-id;\r
+ description "an optional vlan id filter";\r
+ }\r
+ }\r
+\r
+ grouping layer3and4FilterGrp {\r
+ description "a grouping for L3 and L4 CTI flow filters identifying fronthaul traffic";\r
+ leaf sourceAddress {\r
+ type inet:ip-address;\r
+ description "an optional source IPv4 or IPv6 address filter";\r
+ }\r
+ leaf sourcePrefix {\r
+ type inet:ip-prefix;\r
+ description "an optional source IPv4 or IPv6 prefix filter - note not mask as in the word doc";\r
+ }\r
+ leaf destinationAddress {\r
+ type inet:ip-address;\r
+ description "an optional destination IPv4 or IPv6 address filter";\r
+ }\r
+ leaf destinationPrefix {\r
+ type inet:ip-prefix;\r
+ description "an optional destination IPv4 or IPv6 prefix filter - note not mask as in the word doc";\r
+ }\r
+ leaf dscp {\r
+ type inet:dscp;\r
+ description "an optional DSCP value filter, for IPv4 or IPv6";\r
+ }\r
+ leaf sourcePortStart {\r
+ type inet:port-number;\r
+ description\r
+ "This defines the UDP source port to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf sourcePortEnd {\r
+ type inet:port-number;\r
+ must "current()>=../sourcePortStart";\r
+ description\r
+ "This defines the UDP source port to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf destinationPortStart {\r
+ type inet:port-number;\r
+ description\r
+ "This defines the UDP destination port to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf destinationPortEnd {\r
+ type inet:port-number;\r
+ must "current()>=../destinationPortStart";\r
+ description\r
+ "This defines the UDP destination port to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf ipv4Protocol {\r
+ type uint8;\r
+ description\r
+ "This defines the IPv4 protocol field to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf ipv6TrafficClass {\r
+ type uint8;\r
+ description\r
+ "This defines the IPv6 Traffic Class field to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf ipv6Flow {\r
+ type inet:ipv6-flow-label;\r
+ description\r
+ "This defines the IPv6 flow label to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ leaf ipv6NextHeader {\r
+ type uint8;\r
+ description\r
+ "This defines the IPv6 next header field to use on a CTI flow.\r
+ This can help with classification uniqueness.";\r
+ }\r
+ }\r
+\r
+ grouping subtypeGrp {\r
+ description "Grouping for Ethernet Subtype";\r
+ leaf protocolSubtype {\r
+ type uint16;\r
+ default 1;\r
+ description\r
+ "the 16-bit sub-type to be used with the standardized O-RAN allocated\r
+ Ethertype value 0x9433. The default value to be used is 0x1. If another\r
+ value is needed it can be configured.";\r
+ }\r
+ }\r
+\r
+ grouping ctiListeningUdpPortGrp {\r
+ description "Grouping for UDP listening port";\r
+ leaf ctiListeningUdpPort {\r
+ type inet:port-number;\r
+// RFC 8407 top level container comment is removed\r
+ mandatory true;\r
+ description\r
+ "This defines the UDP destination port to use for all CTI messages.";\r
+ }\r
+ }\r
+}\r
--- /dev/null
+module o-ran-delay-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:delay:1.0";
+ prefix "o-ran-delay";
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module covers off aspects of O-DU to O-RU delay management,
+ including configuration data related to O-RU transmission and reception
+ windows.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) Removing the range to align bandwidth type to same bandwidth type as
+ in uplane-config module and module-cap modules.
+ 2) Add in Ta3-2g data processing delay";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for for beamforming list and delay profiles(s) per endpoint.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introducing new feature for ACK NACK feedback.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add new schema node beam-context-gap-period.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) introduction of new t1a-max-cp-dl leaf to enable decoupled timing between C- and U-Plane";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) fixing descriptions of ta3-min and ta3-max.
+ 2) introducing grouping/uses to enable model re-use by WG5";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature ADAPTIVE-RU-PROFILE {
+ description
+ "This feature indicates that the O-RU supports adaptive O-RU delay profile
+ based on information provided by the NETCONF client.";
+ }
+
+ typedef bandwidth {
+ type uint32;
+ units kilohertz;
+ description
+ "transmission bandwidth configuration in units of kHz -
+ covering NB-IoT through to New Radio.
+ Value shall correspond to a value defined in 38.104.";
+ }
+
+ grouping bandwidth-configuration {
+ description
+ "Grouping for bandwidth and SCS configuration";
+
+ leaf bandwidth {
+ type bandwidth;
+ 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 "sub-carrier spacing in Hz";
+ }
+ }
+
+ grouping t2a-up {
+ description
+ "configuration of t2a for uplink";
+
+ leaf t2a-min-up {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-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";
+ }
+ }
+
+ grouping t2a-cp-dl {
+ description
+ "Grouping for t2a CP for downlink";
+
+ leaf t2a-min-cp-dl {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-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";
+ }
+ }
+
+ grouping ta3 {
+ description
+ "Grouping for ta3 configuration";
+
+ leaf ta3-min {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the first data sample over the
+ fronthaul interface";
+ }
+ leaf ta3-max {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the last data sample over the
+ fronthaul interface";
+ }
+ }
+
+ grouping t2a-cp-ul {
+ description
+ "Grouping for t2a CP uplink";
+
+ leaf t2a-min-cp-ul {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-RU data processing delay between receiving real time
+ up-link control plane message over the fronthaul interface and
+ receiving 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";
+ }
+ }
+
+ grouping ta3-ack {
+ description
+ "Grouping for ta3-ack configuration";
+ leaf ta3-min-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the minimum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+
+ leaf ta3-max-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the maximum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+ }
+
+ grouping ta3-2g {
+ description
+ "Grouping for ta3-2g configuration";
+
+ leaf ta3-min-2g {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint32;
+ units nanoseconds;
+ description
+ "The minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting a C-Plane message carrying RRM measurements
+ over the fronthaul interface.
+
+ Please refer to CUS specification clause 4.4.3 for more details.";
+ }
+ leaf ta3-max-2g {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting a C-Plane message carrying RRM measurements
+ over the fronthaul interface.
+
+ Please refer to CUS specification clause 4.4.3 for more details.";
+ }
+ }
+
+ grouping ru-delay-profile {
+ description
+ "Grouping for RU delay profile";
+
+ uses t2a-up;
+ uses t2a-cp-dl;
+
+ leaf tcp-adv-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.";
+ }
+
+ uses ta3;
+ uses t2a-cp-ul;
+ uses ta3-ack;
+ uses ta3-2g;
+ }
+
+ grouping o-du-delay-profile {
+ description
+ "Grouping for O-DU delay profile";
+
+ leaf t1a-max-up {
+ type uint32;
+ units nanoseconds;
+ description
+ "the earliest possible time which the O-DU can support transmitting
+ an IQ data message prior to transmission of the corresponding IQ
+ samples at the antenna";
+ }
+ leaf tx-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum amount of time which the O-DU requires to transmit
+ all downlink user plane IQ data message for a symbol";
+ }
+ leaf ta4-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the latest possible time which the O-DU can support receiving the
+ last uplink user plane IQ data message for a symbol.";
+ }
+ leaf rx-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum time difference the O-DU 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";
+ }
+ leaf t1a-max-cp-dl {
+ type uint32;
+ units nanoseconds;
+ description
+ "The earliest possible time which the O-DU can support transmitting the
+ downlink real time control message prior to transmission of the
+ corresponding IQ samples at the antenna.";
+ }
+ }
+
+ grouping t12 {
+ description
+ "Grouping for t12";
+
+ leaf t12-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between DU port-ID and O-RU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t12-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between CU port-ID and O-RU port-ID";
+ }
+ }
+
+ grouping t34 {
+ description
+ "Grouping for t34";
+
+ leaf t34-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between O-RU port-ID and CU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t34-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between O-RU port-ID and CU port-ID";
+ }
+ }
+
+ grouping non-default-ru-delay-profile {
+ description
+ "Grouping for O-RU delay profile different from the default value in ru-delay-profile.";
+ leaf t2a-min-up {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum O-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;
+ 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;
+ description
+ "the minimum O-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;
+ 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 tcp-adv-dl {
+ type uint32;
+ units nanoseconds;
+ 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;
+ description
+ "the minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the first data sample over the
+ fronthaul interface";
+ }
+ leaf ta3-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the last data sample over the
+ fronthaul interface";
+ }
+ leaf t2a-min-cp-ul {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum O-RU data processing delay between receiving real time
+ up-link control plane message over the fronthaul interface and
+ receiving the first IQ sample at the antenna";
+ }
+ leaf t2a-max-cp-ul {
+ type uint32;
+ units nanoseconds;
+ 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";
+ }
+ leaf ta3-min-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the minimum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+ leaf ta3-max-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the maximum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+
+ uses ta3-2g;
+ }
+
+ grouping delay-management-group {
+ description "a delay management grouping";
+ list bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+
+ uses bandwidth-configuration;
+
+ container ru-delay-profile {
+ config false;
+ description "container for O-RU delay parameters";
+
+ uses ru-delay-profile;
+ }
+ }
+
+ list non-default-ru-delay-profile {
+ if-feature feat:BF-DELAY-PROFILE;
+ key "delay-profile-id";
+ description
+ "Sets of parameters defined when o-ru supported multiple delay profiles,
+ only the parameters that are different from the default delay profile are defined.";
+ leaf delay-profile-id {
+ type uint16 {
+ range "1..max";
+ }
+ description
+ "Used to identify the set of delay profile that are different from the default delay profile.
+ Value '0' is reserved to refer to default value";
+ }
+ list non-default-bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+ uses bandwidth-configuration;
+ container non-default-ru-delay-profile {
+ config false;
+ description
+ "O-RU delay parameters that are different from the default delay profile.
+ If a parameter doesn't exist, this parameter will use the defalt value determined in ru-delay-profile.";
+ uses non-default-ru-delay-profile;
+ }
+ }
+ }
+
+ 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.";
+
+ uses bandwidth-configuration;
+
+ container o-du-delay-profile {
+ description
+ "O-DU provided delay profile for adaptive delay configuration";
+
+ uses o-du-delay-profile;
+ }
+ }
+
+ container transport-delay {
+ description
+ "O-DU provided transport-delay parameters";
+ uses t12;
+ uses t34;
+ }
+ }
+
+ leaf beam-context-gap-period {
+ type uint16;
+ units microseconds;
+ description
+ "Time gap between the end of reception window of the C-Plane message(Msg-A) with new beam weights for a given beamId and end of the reception window
+ of the C-Plane message(Msg-B) that cites the same beamId without weights in the new context.
+ Note: Value of '0' indicates that the end of the Msg-A and Msg-B reception windows are perfectly aligned, which should allow Msg-B to use the new
+ beamforming weights with a '0' microsecond beam-context-gap-period. Value of '65535' implies infinite gap, which means a beamId may not be reused
+ at all in a different context (applicable only to weight-based dynamic beamforming). If O-DU chooses not to interpret/honor this value, behaviour
+ of O-RU is unpredictable if a beamId has new weights loaded in one context and is reused in a different context. Please refer the CUS-Plane spec
+ Section 'Weight-based dynamic beamforming' for detailed description";
+ }
+ }
+ container delay-management {
+ description "top-level tree covering off O-DU to O-RU delay management";
+
+ uses delay-management-group;
+ }
+}
--- /dev/null
+module o-ran-dhcp {
+ yang-version 1.1;
+ namespace "urn:o-ran:dhcp:1.0";
+ prefix "o-ran-dhcp";
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-dhcpv6-types {
+ prefix dhcpv6-type;
+ revision-date 2018-09-04;
+ }
+
+ import ietf-dhcpv6-common {
+ prefix dhcpv6-type2;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the DHCP client.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 10.1.0
+
+ 1) Remove mandatory statement for leaf ia-type";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added DUID/IAID support for IPv4.
+ 2) switched import FROM ietf-dhcpv6-types TO ietf-dhcpv6-common";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) Typographical corrections for british english.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added new leafs for reporting discovered event-collectors
+ used";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to fix pen number which always
+ should have been 32 bits
+ 2) backward compatible changes to introduce reporting of 3GPP
+ discovered MV-PnP information, including CA/RA Servers and SeGW
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef netconf-client-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A NETCONF client identifier";
+ }
+
+ typedef ca-ra-server-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A CA/RA Server identifier";
+ }
+
+ typedef segw-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A SeGW identifier";
+ }
+
+ typedef event-collector-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "An event collector identifier";
+ }
+
+ grouping ca-ra-servers {
+ description
+ "The CA/RA servers discovered using DHCP, discovered using the 3GPP
+ defined options in 3GPP 32.509 in vendor specific option 43/17";
+ list ca-ra-servers {
+ key servers;
+ description "A list of IP addresses or URIs for CA/RA Servers";
+
+ leaf servers{
+ type ca-ra-server-id;
+ description "the server identifier";
+ }
+ leaf port-number {
+ type inet:port-number;
+ description "an optional (non-default) port";
+ }
+ leaf ca-ra-path {
+ type string;
+ description
+ "ASCII string representing the path to the CMP server directory.
+ A CMP server may be located in an arbitrary path other than root.";
+ }
+ leaf subject-name {
+ type string;
+ description
+ "ASCII string representing the subject name of the CA/RA. ";
+ }
+ leaf protocol {
+ type enumeration {
+ enum HTTP {
+ description
+ "HTTP used to communicate with CA/RA server";
+ }
+ enum HTTPS{
+ description
+ "HTTPS used to communicate with CA/RA server";
+ }
+ }
+ description "the protocol used to communicate with a CA/RA server";
+ }
+ }
+ }
+
+ grouping security-gateways {
+ description
+ "The security gateways discovered using DHCP, discovered using the 3GPP
+ defined options in 3GPP 32.509 in vendor specific option 43/17";
+ list segw {
+ key gateways;
+ description "A list of IP addresses or URIs for SeGW";
+
+ leaf gateways{
+ type segw-id;
+ description "the SeGW identifier";
+ }
+ }
+
+ }
+
+ grouping netconf-clients {
+ description
+ "The NETCONF clients discovered using DHCP, discovered using the IANA
+ defined options or O-RAN defined syntax for encoding IP addresses or FQDNs
+ in vendor specific option 43/17";
+ 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 event-collectors {
+ description
+ "The event-collectors discovered using DHCP, discovered using the O-RAN
+ defined syntax for encoding IP addresses or FQDNs in vendor specific
+ option 43/17";
+ leaf-list event-collectors{
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type event-collector-id;
+ max-elements 1;
+ description
+ "An event-collector discovered using DHCP that can be used by the O-RU to
+ send pnfRegistration notification messages.
+
+ The O-RU behaviour when discovering more than one event-collector is not defined.";
+ }
+ leaf event-collector-format{
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type enumeration {
+ enum ONAP {
+ description "ONAP format is used to signal the event-collector";
+ }
+ }
+ description "the event-collector notification format";
+ }
+ }
+
+ 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 O-RUs subnet";
+ }
+ uses netconf-clients;
+ uses ca-ra-servers;
+ uses security-gateways;
+ uses event-collectors;
+ }
+
+ grouping dhcpv6-option {
+ description "DHCPv6 Configuration options";
+
+ container dhcp-server-identifier{
+ status deprecated;
+ description "dhcpv6 server identifier - deprecated as this uses import from ietf-dhcpv6-types and not ietf-dhcpv6-common";
+ uses dhcpv6-type:duid;
+ }
+ container dhcpv6-server-identifier{
+ description "dhcpv6 server identifier - replaces container dhcp-server-identifier and uses import from ietf-dhcpv6-common";
+ uses dhcpv6-type2: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;
+ uses ca-ra-servers;
+ uses security-gateways;
+ uses event-collectors;
+ }
+
+ grouping dhcp-group {
+ description "a dhcp grouping";
+ 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 - used when the DHCPv4 client in the O-RU does not use DUID/IAID";
+ }
+ uses dhcpv6-type2:duid;
+
+ container identity-association {
+ description "an optional container - used when DHCPv4 client uses DUID/IAID as identifier";
+
+ leaf iaid {
+ type uint32;
+ description "IAID";
+ }
+ leaf ia-type {
+ type string;
+ description "IA type";
+ }
+ }
+ uses dhcpv4-option;
+ }
+ container dhcpv6 {
+ description "DHCPv6 information";
+ container dhcp-client-identifier{
+ status deprecated;
+ description "dhcpv6 client identifier - deprecated as this uses import from ietf-dhcpv6-types and not ietf-dhcpv6-common";
+ uses dhcpv6-type:duid;
+ }
+ container dhcpv6-client-identifier{
+ description "dhcpv6 client identifier using ietf-dhcpv6-common import";
+ uses dhcpv6-type2:duid;
+ container identity-association {
+ description "a container describing IAID information";
+
+ leaf iaid {
+ type uint32;
+ description "IAID";
+ }
+ leaf ia-type {
+ type string;
+ description "IA type";
+ }
+ }
+ }
+ uses dhcpv6-option;
+ }
+ }
+
+ container m-plane-dhcp {
+ description "leafs covering off DHCP aspects of m-plane operations";
+ leaf private-enterprise-number {
+ type uint16;
+ default 53148;
+ status deprecated;
+ description "the private enterprise number allocated to O-RAN Alliance";
+ }
+ leaf private-enterprise-num {
+ type uint32;
+ default 53148;
+ description "the private enterprise number allocated to O-RAN Alliance";
+ }
+ leaf vendor-class-data {
+ type string;
+ description
+ "The string used in DHCPv4 option 60 or DHCPv4 option 124 and
+ DHCPv6 option 16";
+ }
+ }
+ }
+
+
+ // Top Level Container
+
+ container dhcp {
+ config false;
+ description
+ "DHCP client configuration";
+
+ uses dhcp-group;
+ }
+}
--- /dev/null
+module o-ran-du-f1-tnl{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:du-f1-tnl:1.0";\r
+ prefix "o-ran-du-f1-tnl";\r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-ep {\r
+ prefix "ep3gpp";\r
+ // TODO AS removed revision date\r
+ // revision-date 2020-03-02;\r
+ }\r
+ \r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+ \r
+ import o-ran-hardware {\r
+ prefix o-ran-hw;\r
+ // TODO AS removed revision date\r
+ // revision-date "2020-04-17";\r
+ }\r
+ \r
+ import o-ran-u-plane-tnl {\r
+ prefix "o-ran-u-tnl";\r
+ revision-date "2020-09-25";\r
+ }\r
+ \r
+ import o-ran-c-plane-tnl {\r
+ prefix "o-ran-c-tnl";\r
+ revision-date "2020-09-25";\r
+ } \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module augments TNL for DU F1 end-point in 3GPP SA5 data models.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/ep3gpp:EP_F1U/ep3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ container o-ran-u-plane-tnl-additional-config {\r
+ description "Container for U-plane F1 TNL configuration";\r
+ uses o-ran-u-tnl:gtp-configuration;\r
+ uses o-ran-u-tnl:dscp-marking; \r
+ }\r
+ description "SA5 gNB DU function augmented with additional F1 TNL configuration"; \r
+ }\r
+ \r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/ep3gpp:EP_F1C/ep3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ container o-ran-c-plane-tnl-additional-config {\r
+ description "Container for C-plane F1 TNL configuration";\r
+ uses o-ran-c-tnl:sctp-configuration;\r
+ uses o-ran-c-tnl:dscp-marking; \r
+ }\r
+ description "SA5 gNB DU function augmented with additional F1 TNL configuration";\r
+ }\r
+}\r
+
\ No newline at end of file
--- /dev/null
+module o-ran-du-performance-management {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:du-pm:1.0";\r
+ prefix "or-du-pm";\r
+\r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the SA5 yang data model according to 28.623 and 28.541 to include the pm-count-groups information of the O-DU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ grouping pm-count-groups {\r
+\r
+ list pm-count-list-drb {\r
+ key "qci-index";\r
+\r
+ leaf qci-index {\r
+ type uint8 {\r
+ range 0..255;\r
+ }\r
+ mandatory true;\r
+ description\r
+ "QoS Class Identifier defined in TS 23.401. Logical range and coding specified in TS 23.203.";\r
+ }\r
+\r
+ leaf pm-count-group {\r
+ type uint8 {\r
+ range 0..17;\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Indicates which of the 17 'PmCountGroup' shall be used for this QCI index. Value 0, indicates that this QCI shall NOT be counted. If duplicated several QCI are set to same pm-count-group, they should be counted as same counter.";\r
+ }\r
+ }\r
+\r
+ list pm-count-list-srb {\r
+ key "srb-index" ;\r
+\r
+ leaf srb-index {\r
+ type uint8 {\r
+ range 1..3;\r
+ }\r
+ description\r
+ "Value 1, 2, 3 indicates SRB1S, SRB2S, SRB3, respectively.";\r
+ }\r
+\r
+ leaf pm-count-group {\r
+ type uint8 {\r
+ range 0|18..20;\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Indicates which of the 3 'PmCountGroup' shall be used for this SRB Index. Value 0, indicates that this SRB Index shall NOT be counted. If duplicated several SRB Index are set to same pm-count-group, they should be counted as same counter.";\r
+ }\r
+ }\r
+ }\r
+\r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/gnbdu3gpp:attributes" {\r
+ container pm-count-groups {\r
+ uses pm-count-groups;\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+module o-ran-ecpri-delay {
+ yang-version 1.1;
+ namespace "urn:o-ran:message5:1.0";
+ prefix "o-ran-msg5";
+
+ import o-ran-processing-element {
+ prefix "element";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module is an optional module for supporting eCPRI message 5 handling
+ used for eCPRI based delay measurements.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 8.1.0
+
+ 1) Clarifying T12 support.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Add support for multiple transport-session-type per O-RU.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) add support for optional reporting of one or two-step measurements";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+// groupings
+
+ grouping msg5-group {
+ description "an eCPRI message 5 grouping";
+
+ 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 O-RU";
+ }
+ leaf tcv1 {
+ type uint32;
+ units nanoseconds;
+ description
+ "a compensation value to account for expected processing time from
+ timestamping in the O-RU until actual packet transmission at R3";
+ }
+ }
+
+ leaf enable-message5 {
+ type boolean;
+ default false;
+ description
+ "whether O-RU's eCPRI message 5 handling is enabled.";
+ }
+
+ leaf one-step-t34-supported {
+ type boolean;
+ config false;
+ description
+ "Indicates whether O-RU supports eCPRI message 5 one-step procedure for
+ T34 measurements.
+ An O-RU supporting this YANG module shall at least set one of
+ one-step-t34-supported or two-step-t34-supported to true.
+
+ Note, an O-RU supporting this YANG module follows the rules of T12 support
+ as defined in O-RAN CUS-Plane, Table 10.2-1.";
+ }
+
+ leaf two-step-t34-supported {
+ type boolean;
+ config false;
+ description
+ "Indicates whether O-RU supports eCPRI message 5 two-step procedure for
+ T34 measurements.
+ An O-RU supporting this YANG module shall at least set one of
+ one-step-t34-supported or two-step-t34-supported to true
+
+ Note, an O-RU supporting this YANG module follows the rules of T12 support
+ as defined in O-RAN CUS-Plane, Table 10.2-1";
+ }
+
+ 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";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element-name'";
+ }
+
+ leaf transport-qualified-processing-element-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/element:processing-elements/element:additional-transport-session-type-elements[element:transport-session-type = current()/../transport-session-type]/element:ru-elements/element:name";
+ }
+ description
+ "the name of the processing element used for MSG5, used when the processing element
+ is configured by the list 'additional-transport-session-type-elements'";
+ }
+
+ container flow-state {
+ config false;
+ description "MSG5 flow state";
+ leaf responses-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 response messages transmitted by
+ the O-RU.";
+ }
+ leaf requests-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 request messages transmitted by
+ the O-RU.";
+ }
+ leaf followups-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 follow up messages transmitted by
+ the O-RU.";
+ }
+ }
+ }
+ }
+ }
+
+// top level container
+
+ container ecpri-delay-message {
+ description "top-level tree covering off O-DU to O-RU msg5 delay measurement";
+
+ uses msg5-group;
+ }
+}
--- /dev/null
+module o-ran-ethernet-forwarding {
+ yang-version 1.1;
+ namespace "urn:o-ran:ethernet-fwd:1.0";
+ prefix "o-ran-eft";
+
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
+ import o-ran-interfaces {
+ prefix "or-if";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the Ethernet forwarding table of an O-RU.
+ This is an option capability used when supporting 'shared cell' operation.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 3.1.0
+
+ 1. Typo corrections for british english";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1. Initial version";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ grouping ethernet-ft {
+ description
+ "Ethernet forwarding table.";
+
+ leaf aging-time {
+ type uint32 {
+ range "10..10000000";
+ }
+ units "seconds";
+ default "300";
+ description
+ "The timeout period in seconds for ageing out
+ dynamically-learned forwarding information.";
+ }
+
+ list filtering-entry {
+ key "address vlan-id";
+ config false;
+ description
+ "List of the entries within the Ethernet forwarding table.
+ This list is keyed by the MAC address and VLAN of the Ethernet frame.";
+
+ leaf address {
+ type yang:mac-address;
+ description
+ "A MAC address (unicast, multicast, broadcast) for
+ which the device has forwarding and/or filtering
+ information.";
+ }
+
+ leaf vlan-id {
+ type uint16 {
+ range "0..4094";
+ }
+ description
+ "VLAN-ID entry in the forwarding table, used during the
+ look-up when receiving an in-coming Ethernet frame to determine
+ how to forward.
+
+ A value of 0 indicates that the filtering entry is for an un-tagged
+ frame/MAC address";
+ }
+
+ list port-map {
+ key "port-ref";
+ description
+ "The list of entries composing the port map.";
+ leaf port-ref {
+ type leafref {
+ path "/if:interfaces/if:interface/or-if:port-reference/or-if:port-number";
+ }
+ description
+ "The interface port reference associated with this map.";
+ }
+ }
+ }
+ }
+
+ container ethernet-forwarding-table {
+ description "Top level container defining forwarding tables for Ethernet";
+
+ uses ethernet-ft;
+ }
+
+}
--- /dev/null
+module o-ran-externalio {
+ yang-version 1.1;
+ namespace "urn:o-ran:external-io:1.0";
+ prefix "o-ran-io";
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ external IO.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of O-RU Connectors for external IO.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping external-io-group {
+ description "an external io grouping";
+ list input {
+ key "name";
+ config false;
+ description
+ "Leaf nodes describing external line inputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A unique name 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.";
+ }
+
+ leaf related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-EXTIO')";
+ description
+ "Referenced name of O-RU connector used by the External IO port - input lines.";
+ }
+ }
+
+ list output {
+ key "name";
+ config false;
+ description
+ "Leaf nodes describing external line outputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique 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 related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-EXTIO')";
+ description
+ "Referenced name of O-RU connector used by the External IO port - output lines.";
+ }
+ }
+
+ list output-setting {
+ key "name";
+
+ description
+ "List allowing to set output line state";
+
+ leaf name {
+ type leafref {
+ path "/external-io/output/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Name derived from unmodifiable list external-io";
+ }
+
+ 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.";
+ }
+ }
+ }
+
+ grouping notification-group {
+ description "a notification grouping";
+ 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";
+ }
+ }
+ }
+ }
+
+// Top Level Container
+
+ container external-io {
+ description
+ "External IO information.";
+ uses external-io-group;
+ }
+
+ notification external-input-change {
+ description
+ "Notification used to indicate that external line input has changed state";
+ uses notification-group;
+ }
+}
--- /dev/null
+module o-ran-fan {
+ yang-version 1.1;
+ namespace "urn:o-ran:fan:1.0";
+ prefix "o-ran-fan";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the state of the O-RAN equipment's fans.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef percent {
+ type uint16 {
+ range "0 .. 100";
+ }
+ description "Percentage";
+ }
+
+ grouping fan-grouping {
+ description "a fan grouping";
+ 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 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";
+ }
+ }
+ }
+
+ container fan-tray {
+ config false;
+ description "top-level tree covering off operational state of the fans";
+
+ uses fan-grouping;
+ }
+}
--- /dev/null
+module o-ran-file-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:file-management:1.0";
+ prefix "o-ran-file-mgmt";
+
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration and operations for handling upload.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 10.2.0
+
+ 1) Improve YANG description enforce typing of IPv6 addresses";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 10.1.0
+
+ 1) Remove crypto-types dependency";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added password for FTPES
+ 2) clarified path/folder description ";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) added FTPES support";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to correct sFTP Server Authentication .
+ 2) minor fixes according to lack of descriptions
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ /***********************************************/
+ /* Identities for Asymmetric Key Algorithms */
+ /***********************************************/
+
+ identity asymmetric-key-algorithm {
+ description
+ "Base identity from which all asymmetric key
+ encryption Algorithm.";
+ }
+
+ identity rsa1024 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 1024-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa2048 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 2048-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa3072 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 3072-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa4096 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 4096-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa7680 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 7680-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa15360 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 15360-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity secp192r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+ identity secp224r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp256r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp384r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp521r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ /**********************************************************/
+ /* Typedefs for identityrefs to above base identities */
+ /**********************************************************/
+
+ typedef asymmetric-key-algorithm-ref {
+ type identityref {
+ base asymmetric-key-algorithm;
+ }
+ description
+ "This typedef enables importing modules to easily define an
+ identityref to the 'asymmetric-key-algorithm'
+ base identity.";
+ }
+
+ grouping file-path-grouping {
+ description "Grouping, that provides local path and remote path for the
+ purpose of File Management scenarios.";
+
+
+ leaf local-logical-file-path {
+ type string;
+ mandatory true;
+ description "URI specifying the complete logical path relative to the root of the logical file system
+ structure (the common root for o-ran/log, o-ran/pm, o-ran/transceiver or o-ran/beamforming) of the file
+ to upload/download (no wildcard is allowed), including a file name and its extension.
+ Example: 'o-ran/log/file_1.abc', where 'o-ran/log/' represents relative path to folder containing log files
+ as specified by O-RAN, 'file_1' represents desired filename and 'abc' represents desired filename's extension.
+ The content shall conform to RFC3986 'Uniform Resource Identifier (URI): Generic Syntax'";
+ }
+
+ leaf remote-file-path {
+ type string;
+ mandatory true;
+ description "URI specifying the remote-file-path on O-DU/SMO or on stand-alone file server.
+ The content shall conform to RFC3986 'Uniform Resource Identifier (URI): Generic Syntax'.
+ When upload/download is via sftp, the format shall be of the form
+ sftp://<username>@<host>[:port]/path
+ When upload/download is via ftpes, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+ IPv6 addresses are distinguished by enclosing the IP literal within square brackets ('[' and ']') as defined by RFC3986 e.g., sftp://user@[2001:0:130F::9C0:876A:130B]:22/path.
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES";
+ }
+ }
+
+ 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 file upload or download.";
+ choice credentials {
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+ description
+ "password used for O-RU authentication to sFTP server for the associated username defined in the remote-file-path.";
+ }
+ description
+ "password for O-RU authentication method in use. This information
+ shall be ignored by an O-RU that is using FTPES based file transfer";
+ }
+ container server {
+ list keys {
+ key algorithm;
+ ordered-by user;
+ uses public-key-grouping;
+ description
+ "List of allowed algorithms with its keys";
+ }
+ description
+ "SSH Key for file server authentication";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+
+ }
+ description "";
+ }
+ container application-layer-credential{
+
+ leaf appl-password {
+ type string;
+ description
+ "The parameter represents the password which may be needed for O-RU application level authentication.
+ For example, to perform authenticatation towards an FTPes server which does not allow anonymous account,
+ in addition to X.509v3 certificate for TLS authentication, password configured here need to be used together with username defined in the remote-file-path ";
+ }
+ description
+ "Application layer credential information";
+ }
+ }
+
+ grouping retrieve-input {
+ description "Grouping for information retrieval RPC input";
+ leaf logical-path {
+ type string;
+ mandatory true;
+ description "URL specifying the logical path relative to the root of the logical file system
+ structure (the common root for o-ran/log, o-ran/pm, o-ran/transceiver or o-ran/beamforming)
+ of the files to be listed.";
+ }
+ leaf file-name-filter {
+ type string;
+ description "Filter which needs to be applied on the result list of file names (* is allowed as wild-card).";
+ }
+ }
+
+ grouping retrieve-output {
+ description "Grouping for information retrieval RPC output";
+ uses output-status-grouping;
+ leaf-list file-list {
+ when "../status = 'SUCCESS'";
+ type string;
+ description "List of files in the unit with the filter applied.";
+ }
+ }
+
+ grouping public-key-grouping {
+ description
+ "A public key.
+
+ The 'algorithm' and 'public-key' nodes are not
+ mandatory because they MAY be defined in <operational>.
+ Implementations SHOULD assert that these values are
+ either configured or that they exist in <operational>.";
+ leaf algorithm {
+ nacm:default-deny-write;
+ type asymmetric-key-algorithm-ref;
+ must '../public-key';
+ description
+ "Identifies the key's algorithm. More specifically,
+ this leaf specifies how the 'public-key' binary leaf
+ is encoded.";
+ reference
+ "RFC CCCC: Common YANG Data Types for Cryptography";
+ }
+ leaf public-key {
+ nacm:default-deny-write;
+ type binary;
+ must '../algorithm';
+ description
+ "A binary that contains the value of the public key. The
+ interpretation of the content is defined by the key
+ algorithm. For example, a DSA key is an integer, an RSA
+ key is represented as RSAPublicKey as defined in
+ RFC 8017, and an Elliptic Curve Cryptography (ECC) key
+ is represented using the 'publicKey' described in
+ RFC 5915.";
+ reference
+ "RFC 8017: Public-Key Cryptography Standards (PKCS) #1:
+ RSA Cryptography Specifications Version 2.2.
+ RFC 5915: Elliptic Curve Private Key Structure.";
+ }
+ }
+
+// RPCs
+
+ rpc file-upload {
+ description "Management plane trigger to upload file from O-RU to file-server";
+ 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 O-RAN unit (* is allowed as wild-card).";
+ input {
+ uses retrieve-input;
+
+ }
+ output {
+ uses retrieve-output;
+ }
+ }
+
+ rpc file-download {
+ description
+ "Management plane trigger to download file from file-server to O-RU.";
+ input {
+ uses file-path-grouping;
+ uses credential-information;
+ }
+ output {
+ uses output-status-grouping;
+ }
+ }
+
+ notification file-upload-notification {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+
+ notification file-download-event {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+}
--- /dev/null
+module o-ran-fm {
+ yang-version 1.1;
+ namespace "urn:o-ran:fm:1.0";
+ prefix "o-ran-fm";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines alarm reporting mechanism.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 15.1.0
+
+ 1) change external alarm source info to external fault source.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new fault-name leaf.
+ 2) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) removed min-elements 1 from affected-objects list
+ 2) added identifier to affected-objects list
+ 3) added new additional-information list";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) added feature HISTORICAL-ALARM-LIST
+ 2) added corresponding historical-alarm-list container";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add new leafs probable-cause, specific-problem, proposed-repair-actions
+ and alarm-type";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature HISTORICAL-ALARM-LIST {
+ description
+ "O-RU supports Historical Alarm List to keep a historical
+ record of alarms events over M-plane.";
+ }
+
+ grouping alarm {
+ description
+ "Grouping 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.
+ If the fault source is external and can not be represented by an object in the model, external fault source info should be set as the value.
+ If the fault source can be represented by an object in the model, the YANG instance-identifier should be set as the value";
+ }
+
+ 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.";
+ }
+
+ leaf identifier {
+ type yang:xpath1.0;
+ description "An optional parameter used to indicate a YANG instance-identifier for the affected
+ object. Used when the object or source is represented in the object model.";
+ }
+
+ 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 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 probable-cause {
+ type string {
+ length "0..255";
+ }
+ description
+ "Probable cause of an alarm as defined in ITU-T Rec. X.733.
+ It qualifies alarm and provides further information than alarm-type.
+
+ The value of the probable cause strings are not standardized in this YANG model.
+
+ An O-RU shall populate this leaf, if the fault-text string does not indicate
+ the probable cause.";
+ }
+
+ leaf specific-problem {
+ type string {
+ length "0..255";
+ }
+ description
+ "An optional leaf providing further qualification on the alarm than probable-cause,
+ as defined in ITU-T Recommendation X.733 ";
+ }
+
+ leaf proposed-repair-actions {
+ type string {
+ length "0..255";
+ }
+ description
+ "Optional leaf, used if the cause is known and the O-RU can suggest one or
+ more solutions to fix the problem causing the alarm as defined in ITU-T Rec. X. 733";
+ }
+
+ leaf event-time {
+ type yang:date-and-time;
+ mandatory true;
+
+ description
+ "Timestamp to indicate the time when the fault is detected/cleared.";
+ }
+
+ list additional-information {
+ key "identifier";
+ description
+ "This parameter allows the inclusion of an additional
+ information set in the alarm. It is a series of data
+ structures, each of which contains items of
+ information: an identifier,
+ and the problem information. Refer to RFC8632.";
+ leaf identifier {
+ type string;
+ description
+ "Identifies the data type of the information parameter.";
+ }
+ leaf information {
+ type string;
+ description
+ "Additional information about the alarm.";
+ }
+ }
+
+ leaf alarm-type {
+ type enumeration {
+ enum COMMUNICATIONS-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum PROCESSING-ERROR-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum ENVIRONMENTAL-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum QUALITY-OF-SERVICE-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum EQUIPMENT-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum INTEGRITY-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum OPERATIONAL-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum PHYSICAL-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum SECURITY-SERVICE-OR-MECHANISM-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum TIME-DOMAIN-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ }
+ description
+ "An optional alarm type that can be used with vendor specific alarms.
+ See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for definitions.
+
+ WG4 common O-RU alarms have pre-defined alarm types, see Annex A of
+ O-RAN.WG4.MP.O";
+ }
+
+ leaf fault-name {
+ type string {
+ length "0..255";
+ }
+
+ description
+ "Name of the fault.
+
+ The primary use case for this leaf is to provide name of a fault if the fault
+ is vendor specific.
+
+ If the leaf is provided for a fault defined in the M-Plane specification,
+ then the value of this leaf should be identical with the value defined in the
+ column 'Name' of the Table 'Common O-RU Alarms' in the Annex A of the
+ M-Plane specification.";
+ }
+ }
+
+ container active-alarm-list {
+ list active-alarms {
+ uses alarm;
+
+ description
+ "List of currently active alarms";
+ }
+ config false;
+
+ description
+ "List of currently active alarms. An alarm is removed from this table when the state transitions to clear.";
+ }
+
+ container historical-alarm-list {
+ if-feature HISTORICAL-ALARM-LIST;
+ description
+ "an optional container to notify the event subscriber of historical alarms information. When the O-RU
+ is reset, the alarm entries from historical-alarm-list will be purged. O-RU vendor can make this
+ list persistent optionally.";
+
+ list historical-alarms {
+ uses alarm;
+
+ config false;
+ description
+ "List of historical alarm events. This list only captures the alarm events when <is-cleared>=TRUE.";
+ }
+
+ }
+
+ notification alarm-notif {
+ uses alarm;
+
+ description
+ "Notification sent on initial alarm creation, as well as any time the alarm changes state, including clear";
+ }
+}
--- /dev/null
+module o-ran-frequency-band-measurement {
+ yang-version 1.1;
+ namespace "urn:o-ran:frequency-band-measurement:1.0";
+ prefix "o-ran-frequency-band-measurement";
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the measurements for operation in specific frequency-band measurement.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ typedef measurement-bandwidth {
+ type enumeration {
+ enum 1MHZ {
+ description
+ "1 MHz measurement bandwidth";
+ }
+ enum 5MHZ {
+ description
+ "5 MHz measurement bandwidth";
+ }
+ enum 10MHZ {
+ description
+ "10 MHz measurement bandwidth";
+ }
+ enum 20MHZ {
+ description
+ "20 MHz measurement bandwidth";
+ }
+ enum 50MHZ {
+ description
+ "50 MHz measurement bandwidth";
+ }
+ enum 100MHZ {
+ description
+ "100 MHz measurement bandwidth";
+ }
+ }
+ description
+ "Measurement unit bandwidths";
+ }
+
+ grouping output-status-grouping {
+ description "Status grouping";
+ leaf status {
+ type enumeration {
+ enum SUCCEEDED {
+ description
+ "The operation has been performed without error.";
+ }
+ enum FAILED {
+ description
+ "The operation has been failed, detailed information can be found in error-message.";
+ }
+ }
+ mandatory true;
+ description
+ "This is the result that the operation has been performed.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+ description
+ "The detailed error message when the operation has been failed.";
+ }
+ }
+
+ grouping received-measurement-result {
+ description
+ "This group indicates the result of received power measurements by O-RU.";
+ list received-power-measurement {
+ key "measurement-frequency";
+ description
+ "This list indicates the received power measurements result for the given spectrum.";
+ leaf measurement-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the starting frequency in MHz for which the received power measurement was performed.";
+ }
+ leaf measurement-bandwidth {
+ type measurement-bandwidth;
+ mandatory true;
+ description
+ "This is the measurement unit bandwidth in MHz";
+ }
+ leaf received-power {
+ type decimal64{
+ fraction-digits 4;
+ }
+ units "dBm";
+
+ description
+ "This is the average of the scalar values of received power, converted into dBm units.
+ The received power is mesured over the frequency range from measure-frequency as the lower bound and
+ measure-frequency + measure-bandwidth as the upper bound.
+ The received power is calculated according to what is foreseen by the specific shared spectrum service used,
+ i.e. for CBRS the Winn Forum definition will have to be used, for other shared band services other calculationmethods might be considered/used.";
+ }
+ }
+ }
+
+ grouping request-spectrum-for-measurement {
+ description
+ "This group indicates the requested measurements by O-RU.";
+ leaf measurement-bandwidth {
+ type measurement-bandwidth;
+ mandatory true;
+ description
+ "This is the measurement unit bandwidth in MHz";
+ }
+ leaf-list measurement-start-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the starting frequency bandwidth in MHz to perform the received power measurement.";
+ }
+ }
+
+ container measurement-capability {
+ config false;
+ description
+ "measurement capability object responsible for providing deatils of O-RU's
+ frequency and band measurement capability.";
+ list measurement-bands-supported {
+ key "measurement-band-num";
+ description
+ "This is the list of supported band capability for O-RU received power measurement.";
+ leaf measurement-band-num {
+ type uint8;
+ description
+ "This is the supported bandnum where O-RU can perform the received power measurement. e.g. band48 for CBRS.";
+ }
+ list frequencys-range-supported {
+ key "lower-frequency";
+ description
+ "This list indicates the frequecy range for which the measurements are supported in the O-RU.";
+ leaf lower-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the lower frequency bandwidth in MHz can perform the received power measurement.";
+ }
+ leaf upper-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the upper frequency bandwidth in MHz can perform the received power measurement.";
+ }
+ }
+ leaf-list measurement-bandwidth {
+ type measurement-bandwidth;
+ description
+ "The supported measurement unit bandwidths";
+ }
+ }
+ leaf in-service-measurement {
+ type boolean;
+ default false;
+ description
+ "indicates whether O-RU can support measurements
+ when tx-array carriers are active in measurement band.";
+ }
+
+ leaf in-service-measurement-only-carrier-freq {
+ when "../in-service-measurement = 'true'";
+ type boolean;
+ default false;
+ description
+ "Indicate an O-RU only support measurement on frequency range as carrier is configured on.";
+ }
+
+ leaf-list supported-measurement-points {
+ type enumeration {
+ enum NO_ARRAY {
+ description
+ "O-RU supports measurements without the rx-array name provided.";
+ }
+ enum ONE_ARRAY {
+ description
+ "O-RU supports measurements with a single rx-array name provided.";
+ }
+ enum MULTIPLE_ARRAYS {
+ description
+ "O-RU supports measurements with multiple rx-array names provided.";
+ }
+ }
+ description
+ "Indicates which measurement points O-RU supports.
+ At least one point shall be provided.";
+ }
+ }
+
+ //rpc definitions
+ rpc received-power-measurement-request {
+ description
+ "This rpc is to request a received power measurement in O-RU.";
+ input {
+ uses request-spectrum-for-measurement;
+
+ leaf-list rx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-arrays/up:name";
+ }
+ description
+ "Names of arrays on which the measurements are requested.
+ Depending on the values reported in supported-measurement-points:
+ * if O-RU reports NO_ARRAY, then an empty list can be provided.
+ * if O-RU reports ONE_ARRAY, then a single rx-array can be provided.
+ * if O-RU reports MULTIPLE_ARRAYS, then multiple rx-arrays can be provided.";
+ }
+ }
+ output {
+ uses output-status-grouping;
+ leaf wait-time {
+ type uint32;
+ units "seconds";
+ description
+ "This is the wait time recommended by O-RU. Requester should wait for mentioned time to get the report if status is SUCCEEDED.
+ If the status is FAILED then request should wait for mentioned time before requesting again.";
+ }
+ leaf measurement-id {
+ type uint8;
+ description
+ "Used to identify a measurement RPC, when andling of multiple RPCs.";
+ }
+ }
+ }
+
+ notification power-measurement-result {
+ description "Notification the measurement results for CBRS.";
+ uses output-status-grouping;
+ uses received-measurement-result;
+ leaf measurement-id {
+ type uint8;
+ description
+ "Used to identify a measurement RPC, when andling of multiple RPCs.";
+ }
+ }
+}
--- /dev/null
+module o-ran-hardware {
+ yang-version 1.1;
+ namespace "urn:o-ran:hardware:1.0";
+ prefix "o-ran-hw";
+
+ import ietf-hardware {
+ prefix hw;
+ }
+ import iana-hardware {
+ prefix ianahw;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN hardware.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) Added support for new fan tray component.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) New connector types for RS485 and external IO";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 10.1.0
+
+ 1) Clarifications for Network Energy Saving";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduction of O-RU connector functionality.
+ 2) fixing constraints";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added date-last-service leaf used in pnfRegistration";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added new leaf to indicate whether O-RU supports dying gasp
+ 2) added new identities for PA and FPGA";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new identities to accommodate cross working group use of
+ o-ran-hardware and associated set of augmentations that are backwards
+ compatible to version 1.0.0";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature ENERGYSAVING {
+ description
+ "Indicates that the Radio Unit supports energy saving state.";
+ }
+
+ // identity statements
+ identity O-RAN-RADIO {
+ base ianahw:module;
+ description
+ "Module used as it represents a self-contained sub-system
+ used in /hw:/hardware/hw:component/hw:class to represent
+ an O-RAN RU";
+ }
+
+ identity O-RAN-HW-COMPONENT {
+ base ianahw:module;
+ description
+ "Module used as it represents a self-contained sub-system
+ used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN hardware component";
+ }
+
+ identity O-DU-COMPONENT {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined O-DU hardware component";
+ }
+
+ identity O-RAN-FAN-TRAY {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined fan tray hardware component.";
+ }
+
+ identity O-RU-COMPONENT {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined O-RU hardware component, including a stand-alone
+ O-RU or an O-RU component integrated into a multi-module system.";
+ }
+
+ identity O-RU-POWER-AMPLIFIER {
+ base O-RU-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ an O-RU's power amplifier, and may be used for reporting
+ measurements on a per class basis";
+ }
+
+ identity O-RU-FPGA {
+ base O-RU-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ an FPGA in an O-RU, and may be used for reporting
+ measurements on a per class basis";
+ }
+
+ identity O-RU-CONNECTOR {
+ base ianahw:hardware-class;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of O-RU connector.";
+ }
+
+ identity O-RU-ANTENNA-CONNECTOR {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU and some
+ antenna function.";
+ }
+
+ identity O-RU-FEEDER {
+ base O-RU-ANTENNA-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is an
+ antenna feeder.";
+ }
+
+ identity O-RU-BF-CAL {
+ base O-RU-ANTENNA-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is for
+ beamforming calibration.";
+ }
+
+ identity O-RU-RS485 {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU and Antenna
+ Line Devices using RS-485 electrical standard.";
+ }
+
+ identity O-RU-EXTIO {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU external I/O lines.";
+ }
+
+ // typedef statements
+ typedef energysaving-state {
+ type enumeration {
+ enum UNKNOWN {
+ description
+ "The O-RU is unable to report its energy saving state.";
+ }
+ enum SLEEPING {
+ description
+ "The O-RU is in energy saving state. In this mode M-Plane connection is active. Depending
+ on the O-RU's design - other planes, functions and hardware components which are not needed
+ by the O-RU in energy saving state can be disabled or switched off by the O-RU autonomously.";
+ }
+ enum AWAKE {
+ description
+ "The O-RU is not in an energy saving state.";
+ }
+ }
+ description
+ "New typedef since ietf-hardware only covers power-state
+ for redundancy purposes, not to indicate energy saving operations.
+ For details please see O-RAN WG4 M-Plane specification, clause 9.1.3 'Modify state'";
+ }
+
+ typedef availability-type {
+ type enumeration {
+ enum UNKNOWN {
+ description "The Radio Unit is unable to report its availability state.";
+ }
+ enum NORMAL {
+ description
+ "The equipment is functioning correctly.";
+ }
+ enum DEGRADED {
+ description
+ "The equipment may be reporting a major alarm or may be reporting a critical
+ alarm that is only impacting one or more subcomponent, but where the
+ equipment's implementation permit it to continue operation (server traffic)
+ in a degraded state.
+
+ Used for example, when the equipment has M identical sub-components and
+ when a critical alarm is impacting only N subcomponents, where N<M.";
+ }
+ enum FAULTY {
+ description
+ "The (sub-)components impacted by the critical alarm(s) impact the
+ ability of the equipment to continue operation (serve traffic).";
+ }
+ }
+ description
+ "Equipment's availability-state is derived by matching active faults
+ and their impact to module's operation and enables an equipment to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+
+ // common WG4 and cross-WG augmentations using O-RAN-RADIO identity
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description "New O-RAN parameters for o-ran hardware";
+
+ container label-content {
+ config false;
+ description
+ "Which set of attributes are printed on the Radio Unit's label";
+ leaf model-name {
+ type boolean;
+ description
+ "indicates whether model-name is included on the equipment's label";
+ }
+ leaf serial-number {
+ type boolean;
+ description
+ "indicates whether serial number is included on the equipment's label";
+ }
+ }
+ leaf product-code {
+ type string;
+ config false;
+ mandatory true;
+ description
+ "O-RAN term that is distinct from model-name in ietf-hardware.";
+ }
+ leaf energy-saving-enabled {
+ if-feature "ENERGYSAVING";
+ type boolean;
+ default false;
+ description
+ "This parameter enables the O-RU to enter into energy saving state if there is no need to keep processing
+ paths working.
+ TRUE is used to permit the O-RU to enter energy saving state. If there is still need keep any
+ processing path, functions or HW components working.
+ The O-RU shall keep necessary processing paths working if there is any [tr]x-array-carrier with
+ 'state' != DISABLED.
+ There may be also additional implementation-specific conditions which may require keeping processing paths,
+ functions or HW components working.
+ FALSE is used to prohibit the O-RU to enter or to stay in energy saving state. This value is also used
+ to awake the O-RU from sleeping when the O-RU is already in energy saving state. Setting this value has
+ no effect on [tr]x-array-carrier::active.
+ When the O-RU enters energy saving state, the O-RU shall reduce its power consumption to the lowest level
+ whilst M-plane remains available. Ongoing Netconf session(s) shall not be affected when the O-RU enters
+ energy saving state.
+ The O-RU uses RO node power-state to inform if the O-RU is in energy saving state.
+ NETCONF client should set energy-saving-enabled to FALSE to ensure O-RU is ready to immediately activate a
+ carrier.";
+ }
+ leaf dying-gasp-support {
+ type boolean;
+ default false;
+ config false;
+ description
+ "indicates whether the O-RU supports the dying gasp
+ capability";
+ }
+ leaf last-service-date {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type yang:date-and-time;
+ description
+ "Date of last service or repair of hardware component. How this gets
+ populated is a vendor specific issue.";
+ reference
+ "3GPP 32.692";
+ }
+ }
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(hw:class, 'ianahw:port')) or
+ (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description "New O-RAN parameters for o-ran naming";
+ leaf o-ran-name {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+ must "re-match(current(),'[a-zA-Z0-9][a-zA-Z0-9\\.\\-_]{0,253}[a-zA-Z0-9]')" {
+ error-message "Name must match pattern and length.";
+ }
+ mandatory true;
+ description
+ "O-RAN name needed to bind and match with the name of hw element,
+ to be compliant with O-RAN naming convention.";
+ }
+ }
+
+ augment "/hw:hardware/hw:component/hw:state" {
+ when "(derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description
+ "new O-RAN defined state";
+ leaf power-state {
+ if-feature "ENERGYSAVING";
+ type energysaving-state;
+ config false;
+ description
+ "The current power saving state for this component.
+ Note - hw:/hardware/component/state/standby-state defined in RFC 4268 is
+ used for redundancy purposes but not for power saving operations.";
+ }
+ leaf availability-state {
+ type availability-type;
+ config false;
+ description
+ "Equipment's availability-state is derived by matching active faults
+ and their impact to module's operation and enables an equipment to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+ }
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RU-ANTENNA-CONNECTOR'))";
+ description "New O-RAN parameters for O-RAN Antenna connectors";
+
+ leaf connector-label {
+ type string;
+ config false;
+ description
+ "the label used to identify the connector on an O-RU ";
+ }
+ }
+
+
+// augmentations to Notifications
+
+ augment "/hw:hardware-state-oper-enabled" {
+ description "new availability state";
+ leaf availability-state {
+ if-feature hw:hardware-state;
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+ }
+ description
+ "The availability-state of the O-RU.";
+ }
+ }
+
+ augment "/hw:hardware-state-oper-disabled" {
+ description "new availability state";
+ leaf availability-state {
+ if-feature hw:hardware-state;
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+ }
+ description
+ "The availability-state of the O-RU.";
+ }
+ }
+}
--- /dev/null
+module o-ran-ieee802-dot1q-cfm {
+ yang-version 1.1;
+
+ namespace "urn:o-ran:o-ran-ieee802-dot1q-cfm:1.0";
+ prefix "o-ran-ieee802-dot1q-cfm";
+
+
+ import ieee802-dot1q-cfm {
+ prefix "dot1q-cfm";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization
+ "O-RAN Alliance";
+ contact
+ "www.o-ran.org";
+ description
+ "This module defines o-ran augmentations over dot1q.cfm.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2023-04-10 {
+ description
+ "Version 12.0.0
+ 1)initial version ";
+
+ reference "ORAN-WG4.M.0-v12.00";
+
+ }
+
+ augment "/dot1q-cfm:cfm/dot1q-cfm:maintenance-group/dot1q-cfm:mep" {
+ description "augment mep with vid";
+ leaf interface {
+ type if:interface-ref;
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ 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";
+ }
+ }
+}
--- /dev/null
+module o-ran-interfaces {
+ yang-version 1.1;
+ namespace "urn:o-ran:interfaces:1.0";
+ prefix "o-ran-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";
+ }
+
+ import iana-hardware {
+ prefix "ianahw";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN
+ interfaces.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) added new MACsec bypass policy.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new config false only leaf for maximum payload size.
+ 2) new configuration for TCP MSS.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) new functionality to describe over subscribed resources";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 1.2.0
+
+ 1) updated descriptions to clarify operation when vlan-tagging is false";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) increasing max elements for user plane DSCP markings to 64
+ 2) re-organizing layout to facilitate cross-WG adoption, whilst ensuring
+ nodes are syntactically and semantically equivalent";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ 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";
+ }
+
+ typedef mss {
+ type uint16;
+ description
+ "Type definition for TCP Maximum Segment Size.";
+ }
+
+ typedef ethertype-string {
+ type string {
+ pattern '([0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}))';
+ }
+ description
+ "A 2 octect hexadecimal string with octets represented as hex digits
+ separated by colons.";
+ }
+
+ grouping cos-marking {
+ description
+ "Configuration data for CU Plane ethernet CoS marking.
+ This grouping is only applicable to an interface when vlan-tagging is
+ set to TRUE for that interface. In other cases, it may be ignored.";
+ container class-of-service {
+ description
+ "CoS Configuration";
+ leaf u-plane-marking {
+ type pcp;
+ default 7;
+ description
+ "Marking used for default u-plane flows.
+ 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";
+ }
+ list enhanced-uplane-markings{
+ key "up-marking-name";
+ max-elements 4;
+ description
+ "list of mappings for enhanced (non-default) u-plane markings";
+ leaf up-marking-name {
+ type string;
+ description "The name of the marking";
+ }
+ leaf enhanced-marking {
+ type pcp;
+ description "the enhanced u-plane marking";
+ }
+ }
+ }
+ }
+
+ grouping dscp-marking {
+ description
+ "Configuration data for CU Plane DSCP marking";
+ container diffserv-markings {
+ description
+ "DSCP Configuration";
+ leaf u-plane-marking {
+ type inet:dscp;
+ default 46;
+ description
+ "Marking used for default u-plane flows.
+ 46 represents expedited forwarding";
+ }
+ leaf c-plane-marking {
+ type inet:dscp;
+ default 46;
+ description "46 represents expedited forwarding";
+ }
+ 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";
+ }
+ list enhanced-uplane-markings{
+ key up-marking-name;
+ max-elements 64;
+ description
+ "list of mappings for enhanced (non-default) u-plane markings";
+ leaf up-marking-name {
+ type string;
+ description "The name of the marking";
+ }
+ leaf enhanced-marking {
+ type inet:dscp;
+ description "the enhanced u-plane marking";
+ }
+ }
+ }
+ }
+
+ grouping tcp-config {
+ description "grouping for per-interface tcp configuration";
+
+ container tcp {
+ presence "tcp configuration";
+ description "per interface TCP configuration";
+
+ leaf mss-adjust {
+ type mss;
+ description
+ "Maximum Segment Size (MSS) used in the MSS Option sent
+ in the TCP initial handshake over this interface and
+ which specifies an upper bound for the TCP MSS of packets
+ that can be received on this interface.
+
+ NOTE, this can be used to reduce the packet size for NETCONF/TLS
+ or NETCONF/SSH to reduce head-of-line blocking due to M-Plane
+ packets sent over the fronthaul downlink interface";
+ }
+ }
+ }
+
+ grouping macsec-bypass-grouping {
+ description "grouping for MACsec bypass policy";
+
+ container macsec-bypass-policy {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description
+ "This is a top level container for MACsec policies.
+ These policies can only be enforced on the base
+ Ethernet interface.
+
+ MAC, EtherType and vlan-id based policies are defined to
+ be applied to the base-interface.
+
+ VLAN based policies can additionally be implicitly
+ enforced by configuring the SecY on a VLAN interface and
+ do not use this container.";
+
+ list policy {
+ key "name";
+ description
+ "Each policy list entry has a matching criteria. Any frame
+ matching the criteris will be forwarded via the uncontrolled port.";
+ leaf name {
+ type string;
+ description
+ "The name of the MACsec policy.";
+ }
+ choice policy-type {
+
+ case mac {
+ leaf-list destination-mac-address {
+ type yang:mac-address;
+ description
+ "Destination IEEE 802 Media Access Control (MAC)
+ address of frames egressing via interface.";
+ }
+ }
+ case ethertype {
+ leaf-list ethertype {
+ type ethertype-string;
+ description
+ "list of ethertypes in frames egressing the interface.";
+ }
+ }
+ case vlan-id {
+ leaf-list vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "list of vlan-ids in frames egressing the interface.";
+ }
+ }
+ description
+ "choice of policy types";
+ }
+ }
+ }
+ }
+
+ grouping macsec-bypass-capabilities {
+ description "grouping for MACsec bypass capabilities";
+
+ container macsec-bypass-capabilities {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ config false;
+ description
+ "This is a container for MACsec bypass capabilities.";
+
+ leaf per-interface-policy-list-max-elements {
+ type uint16;
+ default 100;
+ description
+ "the maximum number of list of elements
+ for each instance of the list
+ /if:interfaces/if:interface/o-ran-int:/macsec-bypass-policy/o-ran-int/policy.";
+ }
+ leaf cummulative-policy-list-max-elements {
+ type uint16;
+ default 100;
+ description
+ "the maximum cummulative number of list entries for
+ all instances of the list
+ /if:interfaces/if:interface/o-ran-int:/macsec-bypass-policy/o-ran-int/policy";
+ }
+ leaf-list supported-policy {
+ type enumeration {
+ enum MAC {
+ description
+ "O-RU supports MAC address based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ enum ETHERTYPE {
+ description
+ "O-RU supports ethertype based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ enum VLAN {
+ description
+ "O-RU supports vlan-id based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ }
+ description
+ "The type of mac bypass policies supported by the O-RU
+ on frames egressing a base-interface.
+
+ An O-RU supporting the MACSEC-BYPASS-POLICY shall include
+ at least one of the defined policies in this list.";
+ }
+ }
+ }
+
+ rpc reset-interface-counters {
+ description
+ "Management plane triggered restart of the interface counters.";
+ }
+
+// Cross Working Group Augmentations Follow
+
+// Cross Working Group augmentations for basic Ethernet leafs
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description "Applies to Ethernet interfaces";
+ }
+ description
+ "Augment the interface model with parameters for
+ base Ethernet interface";
+
+ 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 maximum-ethernet-payload-size {
+ type uint16 {
+ range "1500 .. 9000";
+ }
+ units bytes;
+ config false;
+ description
+ "The maximum size of the Ethernet payload that an O-RU can transmit
+ or receive on the interface (excluding any frame header,
+ maximum frame payload size, frame checksum
+ sequence and any 802.1Q tag).
+
+ TAKE NOTE - THE FORMULA IN THIS DESCRIPTION DIFFERS FROM THE
+ FORMULA IN THE DESCRIPTION OF THE l2-mtu LEAF.
+
+ THIS LEAF CORRESPONDS TO THE DATA/PAYLOAD **ONLY** AND DOES **NOT**
+ INCLUDE ANY OTHER FRAME OVERHEAD LIKE SOURCE/DESTINATION ADDRESSES,
+ LENGTH, 802.1Q TAGS OR FCS.";
+ }
+
+ leaf vlan-tagging {
+ type boolean;
+ default true;
+ description
+ "Indicates if VLAN tagging is used.
+ Default true is used to enable equipment to autonomously discover that
+ it is connected to a trunk port.
+
+ This may be set to false, for example, when the O-RU is directly
+ connected to the O-DU. In such cases, native Ethernet frames may be
+ used across the O-RAN interface, i.e., any PCP markings defined
+ in the cos-markings grouping are NOT used by the O-RU and any default
+ value or configured value using those leafs may be ignored by the O-RAN
+ equipment.";
+ }
+ uses cos-marking;
+
+// interface-grouping insert - begin;
+
+ leaf-list interface-groups-id {
+ type leafref {
+ path "/if:interfaces/o-ran-int:interface-grouping/o-ran-int:interfaces-groups/o-ran-int:interface-group-id";
+ }
+ config false;
+ description
+ "an optional leaf used when the sustained rate able to be supported by an interface
+ is less than nominal bit rate indicated by o-ran-transceiver.yang
+
+ Identifies interface grouping particular physical hardware MAC address belongs to.";
+ }
+
+// interface-grouping insert - end;
+ }
+
+// augmentation for MACsec bypass policies
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description "Applies to Ethernet interfaces";
+ }
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description
+ "Augment the interface model with bypass parameters for
+ base Ethernet interface";
+
+ uses macsec-bypass-grouping;
+ }
+
+ augment "/if:interfaces" {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description "augmentation for MACsec bypass capabilitites";
+
+ uses macsec-bypass-capabilities;
+ }
+
+
+// Cross Working Group augmentation for l2vlan interfaces for VLAN definition
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:l2vlan'";
+ description "augments for VLAN definition";
+ leaf base-interface {
+ type if:interface-ref;
+ must "/if:interfaces/if:interface[if:name = current()]"
+ + "/o-ran-int:vlan-tagging = 'true'" {
+ description
+ "The base interface must have VLAN tagging enabled.";
+ }
+ description
+ "The base interface for the VLAN sub-interface.";
+ }
+ leaf vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The VLAN-ID.";
+ }
+ }
+
+// Cross Working Group augmentation for both ethernetCsmacd and l2vlan interfaces
+
+ augment "/if:interfaces/if:interface" {
+ when "(if:type = 'ianaift:ethernetCsmacd') or
+ (if:type = 'ianaift:l2vlan')" {
+ description "Applies to ethernetCsmacd and l2vlan interfaces";
+ }
+ description
+ "Augment the interface model with parameters for all
+ both ethernetCsmacd and l2vlan interfaces.";
+ leaf last-cleared {
+ type yang:date-and-time;
+ config false;
+ description
+ "Timestamp of the last time the interface counters were
+ cleared.";
+ }
+ }
+
+// Cross Working Group augmentation to ietf-ip covering DSCP for M-Plane
+
+augment "/if:interfaces/if:interface/ip:ipv4" {
+ description "augments for IPv4 based M-Plane transport";
+ leaf m-plane-marking {
+ type inet:dscp;
+ default 18;
+ description "18 represents AF21 or 'immediate traffic'";
+ }
+}
+augment "/if:interfaces/if:interface/ip:ipv6" {
+ description "augments for IPv6 based M-Plane transport";
+ leaf m-plane-marking {
+ type inet:dscp;
+ default 18;
+ description "18 represents AF21 or 'immediate traffic'";
+ }
+}
+
+// Cross Working Group augmentation to ietf-ip covering TCP MSS for M-Plane
+
+augment "/if:interfaces/if:interface/ip:ipv4" {
+ if-feature feat:PER-INT-TCP-MSS;
+ description "augments for IPv4 based CUS transport";
+ uses tcp-config;
+}
+augment "/if:interfaces/if:interface/ip:ipv6" {
+ if-feature feat:PER-INT-TCP-MSS;
+ description "augments for IPv6 based CUS transport";
+ uses tcp-config;
+}
+
+
+// WG4 Specific Augmentations Follow
+
+// WG4 Augmentation for basic Ethernet leafs
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description
+ "Applies to WG4 Ethernet interfaces for alias MAC based CU-Plane";
+ }
+ if-feature ALIASMAC-BASED-CU-PLANE;
+ description
+ "Augment the interface model with parameters for
+ base Ethernet interface";
+
+ leaf-list alias-macs {
+ type yang:mac-address;
+
+ description
+ "Augments interfaces with range of alias MAC addresses.";
+ }
+
+ }
+
+// WG4 Augmentation for both ethernetCsmacd and l2vlan interfaces
+
+ augment "/if:interfaces/if:interface" {
+ when "(if:type = 'ianaift:ethernetCsmacd') or
+ (if:type = 'ianaift:l2vlan')" {
+ description "Applies to ethernetCsmacd and l2vlan interfaces";
+ }
+ description
+ "Augment the interface model with parameters for all
+ both ethernetCsmacd and l2vlan interfaces.";
+ leaf mac-address {
+ type yang:mac-address;
+
+ description
+ "The MAC address of the interface.";
+ }
+
+ container port-reference {
+ description
+ "a port reference used by other O-RAN modules";
+ leaf port-name {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'ianahw:port')";
+// TAKE NOTE - depending on version of pyang, this may generate various
+// warnings, e.g., warning: XPath for "port-name" does not exist
+ description
+ "O-RAN interfaces use a reference to a physical port component.
+
+ In this case, the component name referenced must be of class type
+ port, i.e., when /hw:hardware/hw:component/hw:class is derived from
+ ianahw:port";
+ }
+ leaf 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 equipment, i.e., cannot be
+ changed during equipment reboots.";
+ }
+ }
+ }
+
+// WG4 specific augmentation to ietf-ip covering DSCP for CUS Plane
+
+ augment "/if:interfaces/if:interface/ip:ipv4" {
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv4 based CUS transport";
+ uses dscp-marking;
+ }
+ augment "/if:interfaces/if:interface/ip:ipv6" {
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv6 based CUS transport";
+ uses dscp-marking;
+ }
+
+// Other Working Group Specific Augmentations Follow Here
+
+// interface-grouping insert - begin;
+
+ augment "/if:interfaces" {
+ description "augments interfaces for groupings of physical hardware addresses that can be used to group Ethernet ports";
+
+ container interface-grouping {
+
+ presence
+ "indicates maximum sustained throughput of an O-RU is less than the combined bandwidth of all physical ports";
+
+ config false;
+
+ description
+ "A container used by an O-RU where the maximum sustained throughput
+ of an O-RU is less than the combined bandwidth of all physical ports";
+
+ list interfaces-groups {
+ key interface-group-id;
+ description "List of interface groups.";
+
+ leaf interface-group-id {
+ type uint8;
+ description "interface group identifier.";
+ }
+
+ leaf max-sustainable-ingress-bandwidth {
+ type uint32;
+ units Mbps;
+ description
+ "Maximum sustainable ingress bandwidth the interface group can handle. The sustainable bandwidth is calculated
+ over one radio frame.
+
+ The peak ingress bandwidth may exceed the sustainable bandwidth for periods shorter than a radio frame period.";
+ }
+
+ leaf max-sustainable-egress-bandwidth {
+ type uint32;
+ units Mbps;
+ description
+ "Maximum sustainable egress bandwidth the interface group can handle. The sustainable bandwidth is calculated
+ over one radio frame.";
+ }
+ }
+ }
+ }
+// interface-grouping insert - end;
+
+}
--- /dev/null
+module o-ran-laa-operations {
+ yang-version 1.1;
+ namespace "urn:o-ran:laa-operations:1.0";
+ prefix "o-ran-laa-operations";
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for DFS measurement.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.2.0
+
+ 1) removing non-ASCII characters from model";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) corrected error in module reference for LAA feature";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef band-num {
+ type enumeration {
+ enum BAND_46_SUBBAND_A {
+ description
+ "46a: 5150 MHz - 5250 MHz";
+ }
+ enum BAND_46_SUBBAND_B {
+ description
+ "46b: 5250 MHz - 5350 MHz";
+ }
+ enum BAND_46_SUBBAND_C {
+ description
+ "46c: 5470 MHz - 5725 MHz";
+ }
+ enum BAND_46_SUBBAND_D1 {
+ description
+ "46d1: 5725 MHz - 5850 MHz";
+ }
+ enum BAND_46_SUBBAND_D2 {
+ description
+ "46d2: 5850 MHz - 5925 MHz";
+ }
+ }
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+
+ grouping band-configuration {
+ description
+ "Grouping for band configuration";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+ leaf-list channel-center-frequency {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency in KHz";
+ }
+ }
+
+ grouping measurement-parameters {
+ description
+ "Grouping for measurement parameters";
+
+ leaf duration-per-channel {
+ type uint16;
+ units milliseconds;
+ description
+ "This value indicates measurement duration per channel in milliseconds.";
+ }
+
+ leaf maximum-response-time {
+ type uint16;
+ units seconds;
+ description
+ "This value indicates maximum response time (i.e., timer) in seconds.";
+ }
+ }
+
+ grouping channel-result-element {
+ description
+ "Grouping for channel result element";
+
+ leaf measured-channel {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency for which the result is computed in KHz.";
+ }
+
+ leaf occupancy-ratio {
+ type uint8;
+ units percent;
+ description
+ "This value indicates occupancy ratio in percentage.";
+ }
+
+ leaf average-rssi {
+ type int8;
+ units dBm;
+ description
+ "This value indicates average RSSI in dBm";
+ }
+ }
+
+ grouping band-result-element {
+ description
+ "Grouping for band result element";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the band for which the result is computed.";
+ }
+
+ leaf measurement-success {
+ type boolean;
+ description
+ "This value indicates whether the measurement is successful for the given band.";
+ }
+ leaf failure-message {
+ when "../measurement-success='false'";
+ type enumeration {
+ enum TIMEOUT {
+ description "Timed out waiting for measurement completion.";
+ }
+ }
+ description "This value indicates the detailed error message for failure of the measurement at O-RU.";
+ }
+
+ list channel-result {
+ when "../measurement-success='true'";
+ key "measured-channel";
+ description "Results for a particular channel";
+
+ uses channel-result-element;
+ }
+ }
+
+ //rpc definitions
+ rpc start-measurements {
+ if-feature mcap:LAA;
+ description "Measurements for Carrier-Selection and Dynamic Frequency Selection (DFS)";
+ input {
+ list band-config {
+ key "band-number";
+ description "Per band configuration for measurements.";
+
+ uses band-configuration;
+ }
+
+ uses measurement-parameters;
+ }
+
+ output {
+ list band-config {
+ key "band-number";
+ description "Output list for all the bands requested for measurements.";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+ leaf-list carrier-center-frequency {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency in KHz";
+ }
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "This indicates the measurements for particular sub band is accepted at O-RU.";
+ }
+ enum REJECTED {
+ description "This indicates the measurements for particular sub band is rejected at O-RU.";
+ }
+ }
+ description "This value indicates the status of the measurement acceptance at O-RU.";
+ }
+
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "This value indicates the detailed error message for the measurement being rejected at O-RU.";
+ }
+ }
+ }
+ }
+
+ // notifications
+ notification measurement-result {
+ if-feature mcap:LAA;
+ description "Notification to provide the results of carrier selection and DFS.";
+ list band-result {
+ key "band-number";
+ description "Results for a particular sub band under band 46.";
+
+ uses band-result-element;
+ }
+ }
+}
--- /dev/null
+module o-ran-laa {
+ yang-version 1.1;
+ namespace "urn:o-ran:laa:1.0";
+ prefix "o-ran-laa";
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration for Carrier-selection and dynamic frequency selection (DFS).
+ Also this module defines operations for DFS measurement.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified description for laa-ending-dwpts-supported and
+ laa-starting-in-second-slot-supported.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) fixing broken constraints (configuration cannot be dependent on
+ operational state). This is a backwards incompatible revision.
+
+ As these constraints only apply when the LAA feature is used, and also
+ when considering the limited number of implementation that need to be
+ taken into consideration for backwards compatibility, it has been
+ agreed to NOT increment the namespace integer.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping laa-configuration {
+ description
+ "Grouping for LAA configuration";
+
+ leaf number-of-laa-scarriers {
+ type uint8;
+ description "Number of LAA secondary carriers to be supported at O-RU.";
+ }
+
+ leaf multi-carrier-type {
+ type enumeration {
+ enum A1 {
+ description "multi-carrier type A1";
+ }
+ enum A2{
+ description "multi-carrier type A2";
+ }
+ enum B1{
+ description "multi-carrier type B1";
+ }
+ enum B2{
+ description "multi-carrier type B2";
+ }
+ }
+ description
+ "This value indicates the list of multi carrier types which as per the document,
+ 3GPP TS 36.213 V13.6.0 (2017-06) 15.1.5 Channel access procedure for transmission(s) on multiple carriers.";
+ }
+
+ leaf multi-carrier-tx {
+ type boolean;
+ description
+ "This value indicates whether self-deferral is activated or not.";
+ }
+
+ leaf multi-carrier-freeze {
+ when "../multi-carrier-type='A1'";
+ type boolean;
+ description "This value indicates if the absence of other technology in the unlicensed band can be guaranteed.";
+ }
+
+ leaf laa-ending-dwpts-supported {
+ type boolean;
+ description
+ "This value is configured by NETCONF client(O-DU) and indicates whether LAA ending in DwPTS is supported by O-DU.";
+ }
+
+ leaf laa-starting-in-second-slot-supported {
+ type boolean;
+ description
+ "This value is configured by NETCONF client(O-DU) and indicates whether LAA starting in second slot is supported by O-RU";
+ }
+ }
+
+ container laa-config {
+ must "number-of-laa-scarriers <= /mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-number-of-laa-scarriers" {
+ error-message "number of laa secondary carriers must be less than supported number of laa scells.";
+ }
+ presence "indicates LAA configuration";
+ description "Container to specify all LAA specific configuration";
+
+ uses laa-configuration;
+ }
+}
--- /dev/null
+module o-ran-lbm {
+ yang-version 1.1;
+ namespace "urn:o-ran:lbm:1.0";
+ prefix "o-ran-lbm";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-interfaces {
+ prefix if;
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio loop-back protocol (IEEE 802.1ag).
+ It is derived from MEF-38 (Service OAM Fault Management YANG Modules, April 2012)
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 1.4.0
+
+ 1) allow 0 to be included in primary-vid.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 1.3.0
+
+ 1) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.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";
+ }
+
+// grouping
+
+ grouping md-group {
+ description "the maintenance domain grouping";
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ 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 Maintenance
+ 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 leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ 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 union {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ type uint16 {
+ range "0";
+ }
+ }
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int: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";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+// top level container
+ container md-data-definitions {
+ description
+ "Data definitions related to the maintenance domains used for supporting
+ Ethernet loopback connectivity checks";
+ uses md-group;
+ }
+}
--- /dev/null
+module o-ran-module-cap {
+ yang-version 1.1;
+ namespace "urn:o-ran:module-cap:1.0";
+ prefix "o-ran-module-cap";
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "or-feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for multiple beamid tables.
+ 2) remove import by revision date for o-ran-compression-factors.
+ 3) Support for deep hibernate sleep mode.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+
+ 1) Introduce bundle-offset-in-se11-supported";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduce TRX-control and advanced sleep modes";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) Clarify the parameter number-of-spatial-streams
+ 2) Introduce NB-IoT";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) Deprecation of power-related capabilities and addition of min-gain
+ 2) se6 rb bit handling for rbgSize equal to zero";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) clarified description statements for component carrier
+ 2) style guide corrections
+ 3) introducing new feature for ACK NACK feedback
+ 4) deprecation for params in band-capabilities";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) aded new parameter st6-4byte-alignment-required";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) Typographical corrections in descriptions.
+ 2) deprecation of compression-method-grouping";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) Added support for external antenna delay handling ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.
+ 2) removed non-ASCII characters
+ 3) clarified number-of-ru-ports_dl/ul description ";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added support for optimising coupling-via-frequency-and-time-with-priorities
+ by adding enhancement to existing method through a new leaf node";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) added RO capability to expose O-RU's ability to support udCompLen record in U-Plane section header fields
+ 2) feature indicating support for static PRACH configuration introduced
+ 3) feature indicating support for static SRS configuration introduced
+ 4) feature indicating support for TDD pattern configuration introduced
+ 5) backward compatible change to introduce new O-RU's features related
+ to Section Description Priority to serve for CUS-Plane C";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) Adding optional little endian support
+ 2) Added support for Dynamic Spectrum Sharing feature
+ 3) Enable number-of-ru-ports to be different between dl and ul
+ 4) Enable regularizationFactor to be signalled outside of section type 6
+ 5) Enable PRACH preamble formats supported to be signalled by O-RU
+ 6) adding support for selective RE sending
+ 7) supporting new section extension for grouping multiple ports
+ 8) signalling to enable O-RU to indicate is requires unique ecpri sequence id
+ for eAxC_IDs serving for UL and DL for the same Component Carrier";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible change to introduce new RW leafs for use in
+ constraints in uplane-config and laa models.
+ 2) removing unnecessary relations to band 46 in uplink";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature LAA {
+ description
+ "Indicates that the Radio Unit supports LAA.";
+ }
+
+ feature EAXC-ID-GROUP-SUPPORTED {
+ description
+ "indicates that the Radio Unit supports EAXC-ID-GROUP-SUPPORTED.";
+ }
+
+ feature TRANSPORT-FRAGMENTATION {
+ description
+ "This leaf is used to indicate whether the O-RU supports O-RAN Radio Transport Fragmentation";
+ }
+
+ feature DSS_LTE_NR {
+ description
+ "Indicates that the Radio Unit supports Dynamic Spectrum Sharing between LTE and NR.";
+ }
+
+ feature PRACH-STATIC-CONFIGURATION-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configuration of PRACH (Physical Random Access Channel) pattern in the static manner, so that PRACH U-Plane traffic can be processed by RU without receiving C-Plane messages conveying the PRACH configuration.";
+ }
+
+ feature SRS-STATIC-CONFIGURATION-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configuration of SRS (Sounding Reference Signal Channel) pattern in the static manner, so that SRS U-Plane traffic can be processed by RU without receiving C-Plane messages conveying the SRS configuration.";
+ }
+
+ feature CONFIGURABLE-TDD-PATTERN-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configurable TDD pattern.";
+ }
+
+ typedef sub-band-string {
+ type string {
+ pattern [ABCD];
+ }
+ description "Sub bands definition";
+ }
+
+ typedef scs-config-type {
+ 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_3_75 {
+ value 13;
+ description
+ "3.75kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ enum KHZ_7_5 {
+ value 15;
+ description
+ "7.5kHz sub carrier spacing";
+ }
+ }
+
+ description
+ "Scs configuration type definition";
+ }
+
+ grouping compression-method-grouping {
+ status deprecated;
+ description
+ "Grouping for compression method.
+ Note: This grouping is deprecated. Please use the one from o-ran-compression-factors module.";
+
+ 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 decompression will be used";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompression method will be used";
+ }
+
+ enum BEAMSPACE {
+ description
+ "Beamspace compression and decompression will be used";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression will be used";
+ }
+
+ enum BLOCK-FLOATING-POINT-SELECTIVE-RE-SENDING {
+ description
+ "block floating-point with selective re sending
+ compression and decompression will be used";
+ }
+ enum MODULATION-COMPRESSION-SELECTIVE-RE-SENDING {
+ description
+ "modulation compression with selective re sending
+ compression and decompression will be used";
+ }
+ }
+ description
+ "Compression method which can be supported by the O-RU.
+ An O-RU may further refine the applicability of compression
+ methods per endpoint using o-ran-uplane-conf.yang model";
+ }
+ }
+
+ grouping sub-band-max-min-ul-dl-frequency {
+ description
+ "Grouping for defining max and min supported frequency - DL and UL.";
+
+ leaf max-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Maximum supported downlink frequency in the
+ LAA sub-band. Value unit is Hz.";
+ }
+
+ leaf min-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Minimum supported downlink frequency in the
+ LAA sub-band. Value unit is Hz.";
+ }
+ }
+
+ grouping 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 realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if O-RU supports real-time variable bit with";
+ }
+
+ list compression-method-supported {
+ uses cf:compression-details;
+
+ leaf-list fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "List of fs offset values supported with this IQ format / compression method;
+ fs-offset adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer to endpoints to have information what
+ exactly is supported on particular endpoint";
+ }
+
+ 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";
+ }
+
+ leaf regularization-factor-se-supported {
+ type boolean;
+
+ description
+ "Informs if regularizationFactor in section type 5 is
+ supported(true) or not(false)";
+ }
+
+ leaf little-endian-supported {
+ type boolean;
+ default false;
+
+ description
+ "All O-RUs support bigendian byte order. This node informs if module supports the
+ the optional capability for little endian byte order for C/U plane data flows.
+
+ Note - little endian support does not invalidate bigendian support.";
+ }
+
+ leaf st6-4byte-alignment-required {
+ type boolean;
+ default false;
+
+ description
+ "An optional flag indicating whether O-RU requires 4-byte aligned Section Type 6 or not.
+ If 4-byte aligned Section Type 6 is required, O-RU shall set this flag to 'true'.
+ If the leaf is ommitted or set to 'false', the O-RU operates using 1-byte aligned Section Type 6.
+ An O-DU recovering a value of 'true' shall ensure that Section Type 6 shall be
+ sent with 4-byte aligned messages, as described in clause 'Elements for the C-Plane Protocol' of
+ the CUS-Plane specification.";
+ }
+
+ leaf se6-rb-bit-supported {
+ type boolean;
+ default false;
+
+ description
+ "If this leaf node has a value 'true', then O-DU may use the 'rb' bit, in which case
+ when the O-DU sets the 'rb' bit to one, it shall also set the value of 'rbgsize' to zero and the
+ O-RU shall interpret the value of 'rb' bit as applicable to this data section. Refer 'SE 6: Non-contiguous
+ PRB allocation in time and frequency domain' requirement #3 of the CUS-Plane specification.";
+ }
+ }
+
+ grouping scs-a-b {
+ description
+ "Grouping for scs-a and scs-b";
+ leaf scs-a{
+ type scs-config-type;
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf scs-b{
+ type scs-config-type;
+ description
+ "Sub-carrier spacing configuration";
+ }
+ }
+
+ grouping ul-mixed-num-required-guard-rbs {
+ description
+ "Required number of guard resource blocks for the combination of
+ sub-carrier spacing values for uplink";
+ uses scs-a-b;
+ 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";
+ }
+ }
+
+ grouping dl-mixed-num-required-guard-rbs {
+ description
+ "Required number of guard resource blocks for the combination of
+ sub-carrier spacing values for uplink";
+ uses scs-a-b;
+ 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";
+ }
+ }
+
+ grouping sleep-mode-capability-info {
+ description
+ "Grouping for sleep mode capabilities supported by the O-RU.";
+
+ list sleep-modes {
+ key "sleep-mode-type";
+ description
+ "List of sleep mode type supported.";
+
+ leaf sleep-mode-type {
+ type enumeration {
+ enum SLEEP_MODE_0 {
+ description "O-RU supports Sleep Mode 0.";
+ }
+ enum SLEEP_MODE_1 {
+ description "O-RU supports Sleep Mode 1.";
+ }
+ enum SLEEP_MODE_2 {
+ description "O-RU supports Sleep Mode 2.";
+ }
+ enum SLEEP_MODE_3 {
+ description "O-RU supports Sleep Mode 3.";
+ }
+ }
+ description
+ "Type of sleep mode supported.";
+ }
+
+ leaf wake-up-duration {
+ type uint32;
+ units microseconds;
+ description "Wake-up duration for a particular sleep mode.";
+ }
+
+ leaf wake-up-duration-guaranteed {
+ type boolean;
+ description
+ "Informs whether the O-RU guarantees the wakeup duration for a particular sleep mode.
+ For sleep-mode-type reported as 'SLEEP_MODE_0', the wake-up-duration-guaranteed shall be reported as 'true'";
+ }
+ }
+
+ leaf defined-duration-sleep-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports the defined-duration sleep functionality.";
+ }
+
+ leaf undefined-duration-sleep-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports the undefined-duration sleep functionality.";
+ }
+ }
+
+ grouping trx-control-capability-info {
+ description
+ "A grouping with parameters for TRX-CONTROL capabilities supported by the O-RU";
+
+ list supported-trx-control-masks {
+ key "index";
+ description
+ "List of supported TRX control masks.";
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list.";
+ }
+
+ leaf mask-name {
+ type string;
+ description
+ "Unique name for each supported TRX control mask.";
+ }
+
+ leaf antenna-mask {
+ type binary;
+ description
+ "Supported Antenna Mask.";
+ }
+ }
+ uses sleep-mode-capability-info;
+ }
+
+ grouping asm-capability-info {
+ description
+ "A grouping with parameters for advanced sleep mode capabilities supported by the O-RU";
+
+ uses sleep-mode-capability-info;
+ }
+
+ grouping ru-capabilities {
+ description
+ "Structure representing set of capabilities.";
+
+ leaf ru-supported-category {
+ type enumeration {
+ enum CAT_A {
+ description
+ "Informs that precoding is not supported in O-RU";
+ }
+ enum CAT_B {
+ description
+ "Informs that precoding is supported in O-RU";
+ }
+ }
+
+ description
+ "Informs about which category O-RU supports";
+ }
+
+ leaf number-of-ru-ports {
+ type uint8;
+ status deprecated;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic (choice is as per configuration)
+ - the number of O-RU ports is the product of number of spatial streams (leaf number-of-spatial-streams) and number of numerologies O-RU supports.
+ For example, if the number of spatial streams is 4 then the number of O-RU ports is 8 when PUSCH and PRACH are processed in the different endpoints.
+ In case there are specific endpoints that support non-time-managed traffic only
+ - the number of O-RU ports calculated with above mentioned equation is extended by number of endpoints supporting only non-time-managed traffic.";
+ }
+ leaf number-of-ru-ports-ul {
+ type uint8;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic AND static channel configuration (choice is as per configuration)
+ - the upper bound of the number of O-RU ports for uplink which is derived from number of UL spatial streams or layers
+ and associated numerology O-RU supports.
+ Numerology capability per spatial stream or layer is based on eaxc id description in CUS specification section entitled
+ 'ecpriRtcid / ecpriPcid (real time control data / IQ data transfer message series identifier)'
+ For example, if O-RU supports for each of 'N' spatial streams or layers 'M' numerologies (as it applies to PUSCH and PRACH), number of ports is N * M.
+ In case there are specific endpoints that support non-time-managed traffic only
+ - the number of O-RU ports calculated is extended by number of endpoints supporting only non-time-managed traffic.
+ Additionally, if there are specific endpoints that support static channel configuration only(e.g. static PRACH)
+ - the number of O-RU ports calculated above is further extended by number of endpoints supporting static channel configuration only.";
+ }
+ leaf number-of-ru-ports-dl {
+ type uint8;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic (choice is as per configuration)
+ - the upper bound of the number of O-RU ports for downlink which is derived from number of DL spatial streams or layers
+ and associated numerology O-RU supports.
+ Numerology capability per spatial stream or layer is based on eaxc id description in CUS specification section entitled
+ 'ecpriRtcid / ecpriPcid (real time control data / IQ data transfer message series identifier)'
+ For example, if O-RU supports for each of 'N' spatial streams or layers 'M' numerologies, number of ports is N * M.
+ In case there are specific endpoints that support non-time-managed traffic only.
+ - the number of O-RU ports calculated with above mentioned equation is extended by number of endpoints supporting only non-time-managed traffic";
+ }
+
+ leaf number-of-spatial-streams {
+ type uint8;
+ description
+ "This value indicates the maximum accumulated number of spatial streams supported by O-RU for DL and UL.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details.";
+ }
+
+ leaf number-of-spatial-streams-dl {
+ type uint8;
+ description
+ "The maximum number of DL spatial streams that O-RU supports.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details.";
+ }
+
+ leaf number-of-spatial-streams-ul {
+ type uint8;
+ description
+ "The maximum number of UL spatial streams that O-RU supports.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details..";
+ }
+
+ leaf max-num-bands {
+ type uint16;
+ description "maximum number of bands supported by the O-RU";
+ }
+
+ leaf max-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Maximum Power per PA per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf min-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Minimum Power per PA per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ 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";
+
+ uses format-of-iq-sample;
+ }
+
+ list ul-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "List of required number of guard resource blocks
+ for the combination of sub-carrier spacing values for downlink";
+
+ uses ul-mixed-num-required-guard-rbs;
+ }
+ list dl-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "List of required number of guard resource blocks
+ for the combination of sub-carrier spacing values for uplink";
+
+ uses dl-mixed-num-required-guard-rbs;
+ }
+
+ leaf energy-saving-by-transmission-blanks {
+ type boolean;
+ mandatory true;
+ description
+ "Parameter informs if unit supports energy saving by transmission blanking";
+ }
+ container eaxcid-grouping-capabilities {
+ if-feature o-ran-module-cap:EAXC-ID-GROUP-SUPPORTED;
+ description
+ "a container with parameters for eaxcid grouping";
+ leaf max-num-tx-eaxc-id-groups {
+ type uint8;
+ description
+ "Maximum number of configurable tx-eaxc-id-group supported by O-RU.";
+ }
+ leaf max-num-tx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of eAxC IDs per tx-eaxc-id-group supported by O-RU, where each group is a union of the 'member-tx-eaxc-id's and a 'representative-tx-eaxc-id'.";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ type uint8;
+ description
+ "the maximum number of groups with the eAxC IDs those are assigned to low-level-rx-links.";
+ }
+ leaf max-num-rx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of eAxC IDs per rx-eaxc-id-group supported by O-RU, where each group is a union of the 'member-rx-eaxc-id's and a 'representative-rx-eaxc-id'.";
+ }
+ }
+
+ leaf dynamic-transport-delay-management-supported {
+ type boolean;
+ mandatory true;
+ description
+ "Parameter informs if unit supports dynamic transport delay management through eCPRI Msg 5";
+ }
+
+ leaf support-only-unique-ecpri-seqid-per-eaxc {
+ type boolean;
+ default false;
+ description
+ "Parameter informs if O-RU expects unique eCPRI sequence id for eAxC_IDs serving
+ for UL and DL for the same Component Carrier.
+
+ Note: If this is set to TRUE, the O-DU can decide to either use different eAxC_IDs for UL and
+ DL or can generate unique sequence ID per eAxC_ID.
+
+ TAKE NOTE: This leaf is backwards compatible from an O-RU perspective BUT an O-RU that
+ sets this leaf to TRUE may result in incompatibilities when operating with an O-DU
+ designed according to the O-RAN CUS-Plane Specification v02.00, e.g., if the O-DU is
+ incapable of using different eAxC values between UL and DL";
+ }
+
+ container coupling-methods {
+ description
+ "O-RU's capabilities related to supported C-Plane and U-Plane coupling methods";
+
+ leaf coupling-via-frequency-and-time {
+ type boolean;
+ description
+ "Coupling via frequency and time; see methods of coupling of C-plane and U-plane in CUS-Plane specification";
+ }
+
+ leaf coupling-via-frequency-and-time-with-priorities {
+ type boolean;
+ description
+ "Coupling via Frequency and time with priorities; see methods of coupling of C-plane and U-plane in CUS-Plane specification.
+ Note: If coupling-via-frequency-and-time-with-priorities is 'true' then coupling-via-frequency-and-time shall also be 'true'.";
+ }
+
+ leaf coupling-via-frequency-and-time-with-priorities-optimized {
+ type boolean;
+ description
+ "Coupling via Frequency and time with priorities optimised; see methods of coupling of C-plane and U-plane in CUS-Plane specification.
+ Note: If coupling-via-frequency-and-time-with-priorities-optimized is 'true' then coupling-via-frequency-and-time shall also be 'true'.";
+ }
+ }
+
+ leaf ud-comp-len-supported {
+ type boolean;
+ description
+ "This property informs if O-RU supports optional field udCompLen in U-Plane messages.
+ Only in case this leaf is present and its value is TRUE, O-RU supports U-Plane messages
+ containing udCompLen field in section header.";
+ }
+
+ leaf ext-ant-delay-capability {
+ if-feature "or-feat:EXT-ANT-DELAY-CONTROL";
+ type enumeration {
+ enum PER-ARRAY-CARRIER {
+ description
+ "Informs that the O-RU supports the configuration of different t-da-offset on different tx-array-carriers,
+ and different t-au-offset on different rx-array-carriers";
+ }
+
+ enum PER-ARRAY {
+ description
+ "Informs that the O-RU supports the configuration of different t-da-offset on different tx-array-carriers
+ only when those tx-array-carriers belong to different tx-arrays,
+ and the O-RU supports the configuration of different t-au-offset on different rx-array-carriers
+ only when those rx-array-carriers belong to different rx-arrays";
+ }
+
+ enum PER-O-RU {
+ description
+ "Informs that the O-RU only supports the configuration of a common t-da-offset across all tx-array-carriers,
+ and a common t-au-offset across all rx-array-carriers";
+ }
+ }
+ description
+ "This property informs what kind of capability the O-RU supports to be configured with external antenna delay.";
+ }
+
+ leaf nack-supported {
+ type boolean;
+ description
+ "This value indicates if O-RU supports sending NACK feedback if a section extension for ACK/NACK request is received,
+ If O-RU reports supporting section extension for ACK/NACK request (section extension 22) and ACK/NACK feedback (section type 8), ACK feedback shall always be supported,
+ while NACK feedback is optionally supported according to 'nack-supported'";
+ }
+
+ leaf st8-scs-supported {
+ type boolean;
+ description
+ "Informs if O-RU supports the optional field scs in Section Type 8 messages.";
+ }
+
+ container energy-saving-capability-common-info {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "A container with parameters for common energy saving capabilities supported by the O-RU";
+
+
+ leaf st8-ready-message-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports Section Type 8 Ready message.";
+ }
+
+ leaf sleep-duration-extension-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports extension of sleep duration.";
+ }
+
+ leaf emergency-wake-up-command-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports emergency wake-up M-Plane command.";
+ }
+ }
+
+ leaf bundle-offset-in-se11-supported {
+ type boolean;
+ default false;
+ description
+ "Informs if O-RU supports receiving non-zero values of bundleOffset in SE11.
+ For details, see CUS-Plane Specification, clause 7.7.11.10.";
+ }
+
+ leaf max-beamId-tables-supported {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ description
+ "This parameter defines the maximum number of beamId tables supported by the O-RU.";
+ }
+
+ leaf min-hibernate-time-duration {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ type uint32;
+ units minutes;
+ description
+ "Informs about the minimum hibernate-time duration that O-RU
+ supports deep-hibernate sleep";
+ }
+
+ leaf max-hibernate-time-duration {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Informs about the maximum hibernate-time duration that O-RU supports deep-hibernate sleep";
+ }
+ }
+
+ grouping sub-band-info {
+ description "container for collection of leafs for LAA sub-band 46";
+ list sub-band-frequency-ranges {
+ key sub-band;
+ description "frequency information on a per sub-band basis";
+ leaf sub-band {
+ type sub-band-string;
+ description "Sub band when band 46";
+ }
+ uses sub-band-max-min-ul-dl-frequency;
+ }
+ leaf number-of-laa-scarriers {
+ type uint8;
+ description
+ "This value indicates the number of LAA secondary carriers supported at O-RU.";
+ }
+
+ leaf maximum-laa-buffer-size {
+ type uint16;
+ description
+ "Maximum O-RU buffer size in Kilobytes (KB) per CC. This parameter is
+ needed at the O-DU to know how much data can be sent in advance
+ and stored at the O-RU to address the LBT uncertainty.";
+ }
+
+ leaf maximum-processing-time {
+ type uint16;
+ units microseconds;
+ description
+ "Maximum O-RU Processing time in microseconds at the O-RU to handle the
+ received/transmitted packets from/to the O-DU. This parameter is
+ needed at the O-DU to determine the time when it needs to send
+ the data to the O-RU.";
+ }
+
+ leaf self-configure {
+ type boolean;
+ description "This value indicates that the O-RU can manage the contention window locally. ";
+ }
+ }
+
+ grouping supported-filter-pass-bandwidths {
+ description
+ "Grouping of filter pass bandwidth capabilities";
+
+ list supported-filter-pass-bandwidths {
+ key "id";
+ config false;
+
+ leaf id {
+ type uint32;
+ description
+ "Identification number for a supported filter pass bandwidth.";
+ }
+
+ leaf type {
+ type enumeration {
+ enum LTE {
+ description
+ "LTE technology.";
+ }
+ enum NR {
+ description
+ "NR technology.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS of LTE and NR technologies.";
+ }
+ }
+ description
+ "Supported carrier type for filter pass bandwidth value.";
+ }
+
+ leaf carrier-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Bandwidth of a carrier for which filter pass bandwidth can be used.";
+ }
+
+ leaf filter-pass-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Filter pass bandwidth of a carrier.";
+ }
+
+ description
+ "List of supported filter pass bandwidths by carriers.";
+ }
+ }
+
+ grouping support-for-dl {
+ description
+ "Grouping for DL specific parameters";
+
+ 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-list supported-technology-dl {
+ type enumeration{
+ enum LTE {
+ description "LTE is supported in DL path.";
+ }
+ enum NR {
+ description "NR is supported in DL path.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS is supported in the DL, which implicitly means LTE and NR are also
+ BOTH supported in the DL.";
+ }
+ }
+ min-elements 1;
+ description
+ "This list provides information regarding technologies supported in DL path";
+ }
+
+ container supported-filter-pass-bandwidths-dl {
+ description
+ "Filter pass bandwidth capabilities for DL.";
+ uses supported-filter-pass-bandwidths;
+ }
+
+ leaf-list tx-array-beamId-table-indexes {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ min-elements 1;
+ description
+ "When O-RU advertises support for multiple beamId tables, this list shall specify the beamId table indexes
+ associated with a given tx-array capabilities list entry. O-DU shall be restricted to choose
+ one or multiple entries for a given configured tx-array-carrier from this list.
+ Note: tx-array and rx-array may use the same beamId table indexes.";
+ }
+
+ }
+
+ grouping support-for-ul {
+ description
+ "Grouping for UL specific parameters";
+
+ 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-list supported-technology-ul {
+ type enumeration{
+ enum LTE {
+ description "LTE is supported in UL path.";
+ }
+ enum NR {
+ description "NR is supported in UL path.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS is supported in the UL, which implicitly means LTE and NR are also
+ BOTH supported in the UL.";
+ }
+ }
+ min-elements 1;
+ description
+ "This list provides information regarding technologies supported in UL path";
+ }
+
+ container supported-filter-pass-bandwidths-ul {
+ description
+ "Filter pass bandwidth capabilities for UL.";
+ uses supported-filter-pass-bandwidths;
+ }
+
+ leaf-list rx-array-beamId-table-indexes {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ min-elements 1;
+ description
+ "When O-RU advertises support for multiple beamId tables, this list shall specify the beamId table indexes
+ associated with a given rx-array capabilities list entry. O-DU shall be restricted to choose
+ one or multiple entries for a given configured rx-array-carrier from this list.
+ Note: tx-array and rx-array may use the same beamId table indexes.";
+ }
+ }
+
+ grouping band-capabilities {
+ description
+ "Capabilities that are needed to be defined per each band";
+
+ leaf band-number {
+ type uint16;
+ description
+ "Band number";
+ }
+
+ container sub-band-info {
+ when "../band-number = '46'";
+ if-feature "o-ran-module-cap:LAA";
+ description "container for collection of leafs for LAA sub-band 46";
+ uses sub-band-info;
+ }
+
+ uses support-for-dl;
+ uses support-for-ul;
+
+ leaf max-num-component-carriers {
+ type uint8;
+ description "maximum number of component carriers supported by the O-RU. This parameter is the
+ cumulative value of 'max-num-carriers-dl' and 'max-num-carriers-ul'";
+ }
+
+ leaf max-num-bands {
+ type uint16;
+ status deprecated;
+ description "maximum number of bands supported by the O-RU.
+ Parameter moved to ru-capabilities, hence deprecated";
+ }
+
+ leaf max-num-sectors {
+ type uint8;
+ description "maximum number of sectors supported by the O-RU";
+ }
+
+ leaf max-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Maximum Power per band per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf min-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Minimum Power per band per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf codebook-configuration_ng {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_ng that are used for precoding.
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+
+ leaf codebook-configuration_n1 {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_n1 that are used for precoding
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+
+ leaf codebook-configuration_n2 {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_n2 that are used for precoding
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+ }
+
+ container module-capability {
+
+ description
+ "module capability object responsible for providing module capability.";
+
+ container ru-capabilities {
+ config false;
+ description
+ "Structure representing set of capabilities.";
+
+ uses ru-capabilities;
+ }
+
+ list band-capabilities {
+ key band-number;
+ config false;
+ description
+ "Capabilities that are needed to be defined per each band";
+
+ uses band-capabilities;
+ }
+ container rw-sub-band-info {
+ if-feature "o-ran-module-cap:LAA";
+ description "config true leafrefs for use as constraints for config true leafs";
+ leaf rw-number-of-laa-scarriers {
+ type leafref {
+ path "/module-capability/band-capabilities/sub-band-info/number-of-laa-scarriers";
+ require-instance false;
+ }
+ description
+ "This value indicates the number of LAA secondary carriers supported at O-RU.";
+ }
+ leaf rw-self-configure {
+ type leafref {
+ path "/module-capability/band-capabilities/sub-band-info/self-configure";
+ require-instance false;
+ }
+ description
+ "This value indicates that the O-RU can manage the contention window locally.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-mplane-int {
+ yang-version 1.1;
+ namespace "urn:o-ran:mplane-interfaces:1.0";
+ prefix "o-ran-mplane-int";
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN Radio Unit
+ management plane interface.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) new leaf for recommended scan interval ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) new functionality to report TLS information ";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) enabling NETCONF clients to be configured.
+ 2) shifting new container to correct position
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ typedef vlan-id {
+ type uint16 {
+ range 1..4094;
+ }
+ description
+ "Type definition representing a single-tagged VLAN";
+ }
+
+ // Groupings
+
+ grouping mplane-group {
+ description "mplane grouping";
+ container searchable-mplane-access-vlans-info {
+ description
+ "These parameters shall be stored by the equipment in reset persistent memory
+ to enable it to be re-used to optimize VLAN discovery procedures.";
+ 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 equipment 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 equipment about lowest VID to be used
+ in VLAN scan procedure";
+ }
+ leaf highest-vlan-id {
+ type vlan-id;
+ description
+ "Value of this parameter informs about highest VID to be used
+ in VLAN scan procedure";
+ }
+ }
+ leaf scan-interval {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The O-RU should repeatedly search using untagged frames and previously configured
+ VLANs whenever it searches across the full range of VLAN IDs.The O-RU controller is
+ able to recommend the maximum interval between repeatedly scanning for M-Plane connectivity
+ on the untagged and configured VLANs using this timer schema node.
+
+ The O-RU shall store this schem-node in reset persistent memory.";
+ }
+ }
+
+ 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]/o-ran-int:vlan-id";
+ }
+ description
+ "vlans used to communicate with management plane servers.";
+ }
+ container client-info {
+ config false;
+ description
+ "the NETCONF client information, discovered by DHCP or manually
+ configured during installation.";
+ 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 O-RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The call home port number discovered or manually configured.";
+ }
+ }
+ 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 O-RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The call home port number discovered or manually configured.";
+ }
+ }
+ 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 "The configured call home server port number";
+ }
+ leaf server-ssh-port {
+ type inet:port-number;
+ default 830;
+ description "The configured SSH server port number";
+ }
+ }
+ container m-plane-tls-ports {
+ description "leafs for managing TLS ports";
+ leaf call-home-tls-port {
+ type inet:port-number;
+ default 4335;
+ description "The configured call home server port number";
+ }
+ leaf server-tls-port {
+ type inet:port-number;
+ default 6513;
+ description "The configured TLS server port number";
+ }
+ }
+ }
+ container configured-client-info {
+ description
+ "the NETCONF client information that may be configured by another
+ NETCONF client. These clients are reported independently from clients
+ manually configured or discovered using DHCP.";
+ 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 configured M-Plane client.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The configured call home port number.";
+ }
+ }
+ 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 configured M-Plane client..";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The configured call home port number.";
+ }
+ }
+ leaf-list mplane-fqdn {
+ type inet:domain-name;
+ description "The configured FQDN(s) of M-Plane client(s).";
+ }
+ }
+ }
+
+
+ // Top Level Container
+
+ container mplane-info {
+ description "top-level container for management plane information";
+
+ uses mplane-group;
+ }
+}
--- /dev/null
+module o-ran-nr-u{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:nr-u:1.0";\r
+ prefix "o-ran-nr-u";\r
+ \r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+ \r
+ import _3gpp-nr-nrm-nrcelldu {\r
+ prefix "nrcelldu3gpp";\r
+ }\r
+ \r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+ \r
+ import o-ran-hardware {\r
+ prefix o-ran-hw;\r
+ // TODO AS removed revision\r
+ // revision-date "2020-04-17";\r
+ }\r
+ \r
+ import o-ran_3gpp-nr-nrm-nrcelldu {\r
+ prefix "or-nrcelldu";\r
+ }\r
+ \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module defines the YANG definitions for NR-U configuration. This is used\r
+ to augment SA5 DU data model.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ grouping nr-u-configuration-group {\r
+ container assistance-information-data-list {\r
+ container radio-quality-assistance-info {\r
+ leaf average-cqi {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include Average CQI information \r
+ when sending Assistance Information Data";\r
+ \r
+ }\r
+ leaf average-harq-failure {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include Average HARQ Failure \r
+ information when sending Assistance Information Data ";\r
+ }\r
+ leaf average-harq-retx {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include Average HARQ Retransmissions \r
+ information when sending Assistance Information Data";\r
+ }\r
+ leaf dl-radio-quality-index {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include DL Radio Quality Index information \r
+ when sending Assistance Information Data";\r
+ }\r
+ leaf ul-radio-quality-index {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include UL Radio Quality Index information \r
+ when sending Assistance Information Data";\r
+ }\r
+ leaf power-headroom-report {\r
+ type enumeration {\r
+ enum DISABLE {\r
+ description "Disable";\r
+ }\r
+ enum ENABLE {\r
+ description "Enable";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description \r
+ "Indicates whether gNB-DU shall include Power Headroom Report information \r
+ when sending Assistance Information Data [14].";\r
+ } \r
+ description "container for radio-quality-assistance-info";\r
+ }\r
+ description "assistance-information-data-list";\r
+ }\r
+ description "grouping of NR-U configuration";\r
+ }\r
+ \r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/nrcelldu3gpp:NRCellDU/nrcelldu3gpp:attributes/or-nrcelldu:o-ran-configuration" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ uses nr-u-configuration-group;\r
+ description "SA5 gNB DU cell o-ran-container augmented with NR-U configuration";\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-o-du-shared-o-ru {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:o-ran-o-du-shared-o-ru";\r
+ prefix "sharedoru";\r
+\r
+ import _3gpp-common-managed-element { prefix me3gpp; }\r
+ import _3gpp-common-top { prefix top3gpp; }\r
+ import _3gpp-nr-nrm-gnbdufunction { prefix gnbdu3gpp; }\r
+ import ietf-inet-types { prefix "inet"; }\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the SA5 yang data model of GNBDuFunction with Shared O-RU parameters.\r
+\r
+ Copyright 2023 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2023-03-17" {\r
+ description\r
+ "version 1.0.0 - initial version";\r
+\r
+ reference "O-RAN.WG5.O-DU-O1.0-v06.00";\r
+ }\r
+\r
+ grouping ConfiguredClientInfoGrp {\r
+ description\r
+ "the NETCONF client information that may be configured by another\r
+ NETCONF client. These clients are reported independently from clients\r
+ manually configured or discovered using DHCP.";\r
+\r
+ leaf host {\r
+ type inet:host;\r
+ description "The IPv4 address of configured M-Plane client.";\r
+ }\r
+ leaf portNumber {\r
+ type inet:port-number;\r
+ description\r
+ "The configured call home port number.";\r
+ }\r
+ }\r
+\r
+ grouping SecondaryODuInfoGrp {\r
+ description\r
+ "This data type provides fields that are needed to configure O-DUs that perform\r
+ the Shared Resource Operator role from the single O-DU that has the Shared O-RU Host role.";\r
+\r
+ leaf oDuIdForSharedORu {\r
+ type string;\r
+ mandatory true;\r
+ description\r
+ "This parameter defines O-DUs own oduidforsharedoru to be used for fronthaul O-DU ID.";\r
+ }\r
+\r
+ leaf sharedResourceOperatorId {\r
+ when "not (../../oDuRoleOfSharedORu = 'HOST')";\r
+ type string;\r
+ description\r
+ "This parameter defines Shared Resource Operator ID of O-DUs,\r
+ which Shared Resource Operator O-DU shall use for the user account of the NETCONF client\r
+ with sro-id configured. When the role of the O-DU is HOST, this attribute is not used.\r
+\r
+ Condition: When O-RU supports Multiple operator Shared O-RU configuration\r
+ and O-RU is configured to work in shared O-RU mode, this parameter is mandatory.";\r
+ }\r
+\r
+ leaf accessCotrolGroup {\r
+ type string;\r
+ description\r
+ "Defines the Netconf access control group per SRO O-DU, which is then created by the Shared O-RU Host\r
+ in the Shared O-RUs. If the role for a O-DU already exists, then that role\r
+ is updated with the new enum “carrier”. When the role of the O-DU is SRO, this attribute is not used.\r
+\r
+ Condition: When O-RU supports Multiple operator Shared O-RU configuration\r
+ and O-RU is configured to work in shared O-RU mode, this parameter is mandatory";\r
+ }\r
+\r
+ leaf supervisionPerODu {\r
+ type boolean;\r
+ description\r
+ "Operator may activate O-RU supervision per Shared Resource Operator O-DU\r
+ by configuring over O1 supervisionperodu to “true”, which triggers Shared O-RU Host\r
+ in Multi OperatorShared O-RU or primary O-DU in Single Operator Shared O-RU\r
+ to configure odu-id parameter in the per-odu-monitoring over Fronthaul M-plane.\r
+ When the role of the O-DU is SRO in Multi Operator Shared O-RU or secondary\r
+ in Single Operator Shared O-RU, this attribute is not used.";\r
+ }\r
+\r
+ list callHomeClientInfo {\r
+ key "host portNumber";\r
+ max-elements 1;\r
+ description\r
+ "In Multi Operator Shared O-RU, over O1 is send only to the Shared O-RU Host O-DU callhomeclientinfo,\r
+ which Shared O-RU Host O-DU shall use to configure in each Shared O-RU\r
+ multiple call home addresses towards O-DU.\r
+\r
+ In Single Operator Shared O-RU, over O1 is send only to the primary O-DU callhomeclientinfo,\r
+ which primary O-DU shall use to configure in each Shared O-RU multiple call home addresses towards O-DU.";\r
+\r
+ uses ConfiguredClientInfoGrp;\r
+ }\r
+\r
+ leaf-list sharedORuList {\r
+ type string;\r
+ description\r
+ "In Multi Operator Shared O-RU, list of Shared O-RU identities connected to the Shared O-RU Host O-DU\r
+ and Shared Resource Operator O-DU\r
+\r
+ In Single Operator Shared O-RU, list of Shared O-RU identities\r
+ connected to the primary O-DU and secondary O-DU.";\r
+ }\r
+ }\r
+\r
+ grouping SharedOruGrp {\r
+ description "Set of attributes needed by O-DU to configure Shared O-RU functionality";\r
+ reference "O-RAN.WG5.O-DU-O1.0-v06.00";\r
+\r
+ leaf oDuRoleOfSharedORu {\r
+ type enumeration {\r
+ enum HOST_AND_SRO {\r
+ description\r
+ "O-DU role as Shared O-RU Host and Shared Resource operator at the same time.\r
+ O-DU shall use Netconf access right group “sudo” in fronthaul.";\r
+ }\r
+\r
+ enum HOST {\r
+ description\r
+ "O-DU role as Shared O-RU Host. O-DU shall use Netconf access right group “sudo” in fronthaul.";\r
+ }\r
+\r
+ enum SRO {\r
+ description\r
+ "O-DU role as Shared Resource Operator. O-DU shall use Netconf access right group “carrier” in fronthaul.";\r
+ }\r
+ }\r
+ description\r
+ "This attribute defines the role of O-DU.\r
+ When O-DU role is set to “HOST_AND_SRO”,\r
+ O-DU simultaneously perform the Shared O-RU Host role and the Shared Resource Operator roles.\r
+\r
+ Condition: When O-RU supports Multiple Operator Shared O-RU configuration and O-RU\r
+ is configured to work in shared O-RU mode, this parameter is mandatory";\r
+ }\r
+\r
+ leaf sharedResourceOperatorId {\r
+ when "not (../oDuRoleOfSharedORu = 'HOST')";\r
+ type string;\r
+ description\r
+ "This parameter defines Shared Resource Operator ID of O-DUs,\r
+ which Shared Resource Operator O-DU shall use for the user account of the NETCONF client\r
+ with sro-id configured. When the role of the O-DU is HOST, this attribute is not used.\r
+\r
+ Condition: When O-RU supports Multiple Operator Shared O-RU configuration\r
+ and O-RU is configured to work in shared O-RU mode, this parameter is mandatory";\r
+ }\r
+\r
+ leaf oDuIdForSharedORu {\r
+ when "not (../oDuRoleOfSharedORu = 'HOST')";\r
+ type string;\r
+ description\r
+ "This parameter defines O-DUs own oduidforsharedoru to be used for fronthaul O-DU ID.\r
+ When the role of the O-DU is HOST, this attribute is not used.\r
+\r
+ Condition: When O-RU supports Multiple Operator Shared O-RU or Shared O-RU Multi O-DU configuration\r
+ and O-RU is configured to work in shared O-RU mode, this parameter is mandatory";\r
+ }\r
+\r
+ list secondaryODuInfoList {\r
+ when "../oDuRoleOfSharedORu = 'HOST' or ../oDuRoleOfSharedORu = 'HOST_AND_SRO'";\r
+ key oDuIdForSharedORu;\r
+ description\r
+ "List containing information about all Secondary O-DUs, which primary O-DU in Single Operator O-RU sharing\r
+ or shared O-RU Host in Multi Operator O-RU sharing O-DU shall use to configure the Shared O-RUs\r
+ included in the sharedORuList field.\r
+\r
+ Condition: This parameter is mandatory when oDuRoleOfSharedORu is HOST or HOST_AND_SRO\r
+ in Multi Operator Shared O-RU or primary in Single Operator Shared O-RU.\r
+ When the role of the O-DU is SRO or secondary, this parameter is not used.";\r
+\r
+ uses SecondaryODuInfoGrp;\r
+ }\r
+ }\r
+\r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction" {\r
+ description\r
+ "Augmentation containing possible configuration for O-DU to act as Shared O-RU host.";\r
+\r
+ list SharedOruConfiguration {\r
+ key id;\r
+ description\r
+ "Contains attributes that is needed to configure Shared O-RU functionality";\r
+ reference "O-RAN.WG5.O-DU-O1.0-v06.00";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description\r
+ "containing attributes for configuration";\r
+ uses SharedOruGrp;\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-o1-ctiOdu {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:o1:o-ran-o1-ctiodu:1.0";\r
+ prefix o-ran-o1-ctiodu;\r
+\r
+ import _3gpp-common-managed-element { prefix me3gpp; }\r
+ import _3gpp-common-top { prefix top3gpp; }\r
+ import _3gpp-common-yang-types { prefix types3gpp; }\r
+ import o-ran-cti-common { prefix or-ctic; }\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+\r
+ import ietf-yang-types {\r
+ prefix yang;\r
+ }\r
+\r
+ import ietf-inet-types {\r
+ prefix inet;\r
+ }\r
+\r
+ import o-ran-common-yang-types {\r
+ prefix or-types;\r
+ }\r
+\r
+ import o-ran-wg5-features {\r
+ prefix or-features;\r
+ }\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the configuration of for an O-DU that implements\r
+ the O-RAN WG4 Cooperative transport Interface. If transport specific\r
+ configuration is required, it is expected that this will be achieved using\r
+ a technology specific augmentation.\r
+\r
+ Copyright 2023 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2023-03-17" {\r
+ description\r
+ "version 04.00\r
+\r
+ updated to completed IM in CTI TMP v4\r
+ ";\r
+\r
+ reference "ORAN-WG4.CTI-TMP.0-v04.00";\r
+ }\r
+\r
+ revision "2022-07-04" {\r
+ description\r
+ "version 3.0.0\r
+\r
+ IM/DM updated for O1 and camelcase\r
+\r
+ Note: the integration (augmentation) of the CTIConfig IOC\r
+ into the broader O-DU Data Model is subject to further study and\r
+ optimization in a future version of the file.";\r
+\r
+ reference "ORAN-WG4.CTI-TMP.0-v3.00";\r
+ }\r
+\r
+ //InformationObjectClass CTIFunction attributes\r
+ grouping CTIFunctionGrp {\r
+ description "Root level of configuration of CTI Clients";\r
+ leaf ctiActivateOnOdu {\r
+ type boolean;\r
+ mandatory true;\r
+ description "Activation of CTI functionality on this O-DU";\r
+ }\r
+ }\r
+\r
+ //DataType CTIConfig attributes\r
+ grouping CTIConfigGrp {\r
+ description "Attributes of Data Type CTIConfig";\r
+ leaf ctiReportRateCategory {\r
+ type uint8 {\r
+ range "1..5";\r
+ }\r
+ config false;\r
+ mandatory true;\r
+ description "the supported message interval, where 1 = 5ms, 2 = 2ms, 3 = 1 ms\r
+ 4 = 0.5ms, 5 = 0.25 ms";\r
+ reference "O-RAN.WG4.CTI-TCP: Table CTI Message Rate Categories for O-DU or TN";\r
+ }\r
+ leaf ctiMessageTimingPerformance {\r
+ type uint8;\r
+ units 20-microseconds;\r
+ config false;\r
+ mandatory true;\r
+ description\r
+ "The minimal spacing needed between the arrival time of the CTI message\r
+ and the start boundary at Ra of the mobile slot N being reported in the message";\r
+ }\r
+ leaf-list supportedCtiVersions {\r
+ type or-ctic:ctiVersion;\r
+ config false;\r
+ min-elements 1;\r
+ max-elements 15;\r
+ description "the list of versions of CTI TC-Plane that are supported by the CTI client";\r
+ }\r
+ leaf minNotificationAdvanceTime {\r
+ type uint16;\r
+ units milliseconds;\r
+ config false;\r
+ description "Min time in advance for reception of Notification message from TN, optional (if such messages are interpreted in O-DU)";\r
+ }\r
+ uses or-ctic:ctiTimersGrp;\r
+ uses or-ctic:subtypeGrp;\r
+ uses or-ctic:ctiListeningUdpPortGrp;\r
+ }\r
+\r
+ //InformationObjectClass CTIClient attributes\r
+ grouping CTIClientGrp {\r
+ description "Attributes of Information Object Class CTIClient";\r
+ leaf ctiClientMacAddr {\r
+ type yang:mac-address;\r
+ description "the CTI client MAC address, if this client has Ethernet connectivity to at least one CTI Server";\r
+ }\r
+ leaf ctiClientInfo {\r
+ type string;\r
+ description "optional information of the CTI client";\r
+ }\r
+ list ctiClientServerStatus {\r
+ key ctiServerRef;\r
+ leaf ctiServerRef {\r
+ type leafref { path "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/CTIFunction/CTIServer/attributes/ctiServerId"; }\r
+ mandatory true;\r
+ description "Reference to a given CTI Server";\r
+ }\r
+ leaf ctiClientServerActivate {\r
+ type boolean;\r
+ mandatory true;\r
+ description "activate CTI exchange between this client and this Server";\r
+ }\r
+ leaf ctiClientServerConnStatus {\r
+ type boolean;\r
+ config false;\r
+ mandatory true;\r
+ description "reflects whether exchange of CTI keep-alive messages with this server indicate CTI connectivity";\r
+ }\r
+ description "list of CTI servers with which the client communicates, and CTI status of Client-Server pair.";\r
+ }\r
+ }\r
+\r
+ //DataType CTISessionGroup attributes\r
+ grouping CTISessionGroupGrp {\r
+ description "Attributes of Data Type CTISessionGroup";\r
+ leaf ctiServerRef{\r
+ type leafref { path "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/CTIFunction/CTIServer/attributes/ctiServerId"; }\r
+ mandatory true;\r
+ description "Reference to corresponding CTIServer instance.";\r
+ }\r
+ leaf ctiConnProfileRef {\r
+ type leafref { path "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/CTIFunction/CTIConnProfile/attributes/ctiConnProfileId"; }\r
+ mandatory true;\r
+ description "Reference to corresponding CTIConnProfile instance.";\r
+ }\r
+ }\r
+\r
+ //DataType CTISession attributes\r
+ grouping CTISessionGrp {\r
+ description "Attributes of Data Type CTISession";\r
+ leaf ctiSessionId {\r
+ type string;\r
+ mandatory true;\r
+ description "the identity of a CTI session";\r
+ }\r
+ leaf oruId {\r
+ type string;\r
+ description "optional Unique identifier for O-RU, following format: mfg-name_model-name_serial-num";\r
+ }\r
+ leaf oruInterfaceId {\r
+ type string;\r
+ description "optional Unique identifier for O-RU interface, following format: mfg-name_model-name_serial-num_macaddr";\r
+ }\r
+ leaf ctiNominalReportMsgInterval {\r
+ type uint8;\r
+ units 0.25-milliseconds;\r
+ mandatory true;\r
+ description "the nominal CTI reporting message interval";\r
+ }\r
+ leaf ctiReportMessagingUseOfType1Ext {\r
+ type boolean;\r
+ mandatory true;\r
+ description "choice of including CTI Type 1 extension row in the CTI report messages";\r
+ }\r
+ }\r
+\r
+ //DataType CTIServer attributes\r
+ grouping CTIServerGrp {\r
+ description "Attributes of Data Type CTIServer";\r
+ leaf ctiServerId {\r
+ type string;\r
+ mandatory true;\r
+ description "Information about the CTI Server";\r
+ }\r
+ leaf ctiServerInfo {\r
+ type string;\r
+ description "Optional information about the CTI Server";\r
+ }\r
+ leaf connectivityType {\r
+ type enumeration {\r
+ enum Ethernet {\r
+ description "Ethernet connectivity (no IP)";\r
+ }\r
+ enum UDPIP {\r
+ description "UDP/IP connectivity";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description "Type of connectivity to be used with this CTI server";\r
+ }\r
+ leaf ctiServerMacAddr {\r
+ when "../connectivityType='Ethernet'";\r
+ type yang:mac-address;\r
+ mandatory true;\r
+ description "the destination address used for CTI messages to the server";\r
+ }\r
+ leaf ctiServerHost {\r
+ when "../connectivityType='UDPIP'";\r
+ type inet:host;\r
+ mandatory true;\r
+ description "host (remote IP address or FQDN) for the CTI Server";\r
+ }\r
+ leaf ctiEnable {\r
+ type boolean;\r
+ mandatory true;\r
+ description "whether the CTI server is enabled";\r
+ }\r
+ leaf-list supportedCtiVersions {\r
+ type or-ctic:ctiVersion;\r
+ min-elements 1;\r
+ max-elements 15;\r
+ description "the list of versions of CTI TC-Plane that are supported by the CTI server. At least 1 must be supported.";\r
+ }\r
+ leaf ctiReportMessagingUseOfType2 {\r
+ type boolean;\r
+ mandatory true;\r
+ description "choice of including CTI Type 2 row in the CTI report messages";\r
+ }\r
+ leaf ponServerInfoUseNotificationsFromThisServer {\r
+ type boolean;\r
+ default false;\r
+ description "use notification from this CTI server";\r
+ }\r
+ leaf docsisServerInfo {\r
+ type string;\r
+ description "placeholder for DOCSIS specific server information";\r
+ }\r
+ }\r
+\r
+ //DataType CTIFlow attributes\r
+ grouping CTIFlowGrp{\r
+ description "Attributes of Data Type CTIFlow";\r
+ leaf ctiFlowId {\r
+ type uint8;\r
+ mandatory true;\r
+ description "the identity of a flow";\r
+ }\r
+ leaf filterType {\r
+ type enumeration {\r
+ enum Ethernet {\r
+ description "filter is based on L2 parameters";\r
+ }\r
+ enum UDPIP {\r
+ description "filter is based on L3 and/or L4 parameters";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description "indication whether CTI Flow corresponds to L2 filter or L3andL4 filter in the TN";\r
+ }\r
+ list layer2Filter {\r
+ when "../filterType='Ethernet'";\r
+ key idx;\r
+ leaf idx { type uint32; description "dummy id"; }\r
+ uses or-ctic:layer2FilterGrp;\r
+ max-elements 1; // 1 flow is associated with 1 filter\r
+ description "List of Layer 2 filters in TN for differentiating CTI flows";\r
+ }\r
+ list layer3and4Filter {\r
+ when "../filterType='UDPIP'";\r
+ key idx;\r
+ leaf idx { type uint32; description "dummy id"; }\r
+ uses or-ctic:layer3and4FilterGrp;\r
+ max-elements 1; // 1 flow is associated with 1 filter\r
+ description "List of Layer 3 / Layer 4 filters in TN for differentiating CTI flows";\r
+ }\r
+ }\r
+\r
+ //DataType CTIFlowsInUse attributes\r
+ grouping CTIFlowsInUseGrp {\r
+ description "Attributes of Data Type CTIFlowsInUse";\r
+ leaf timeIntervalPerReport {\r
+ type uint8;\r
+ units 0.25-milliseconds;\r
+ mandatory true;\r
+ description "Rate of reporting for given Flow ID in given CTI session ID, in units of 0.25ms";\r
+ }\r
+ leaf maxT34Latency {\r
+ type uint16;\r
+ units 5-microseconds;\r
+ mandatory true;\r
+ description\r
+ "The maximum T34 latency allocated between O-RU and O-DU, in multiples of 5 microseconds";\r
+ }\r
+ leaf minLoad {\r
+ type uint8;\r
+ units Mbps;\r
+ default 0;\r
+ description\r
+ "The minimum load (in Mbit/s) to be used in reported Bytes field of CTI reports,\r
+ to be converted in amount of Bytes for the reported time interval.";\r
+ }\r
+ leaf extraLoadCplane {\r
+ type uint8;\r
+ units Mbps;\r
+ default 0;\r
+ description\r
+ "The extra load for uplink C-plane traffic (in Mbit/s) to be added in reported Bytes field of CTI reports,\r
+ to be converted in amount of Bytes for the reported time interval.";\r
+ }\r
+ leaf ctiFlowRef {\r
+ type leafref { path "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/CTIFunction/CTIServer/CTIFlow/attributes/ctiFlowId"; }\r
+ mandatory true;\r
+ description "Reference to corresponding CTIFlow instance.\r
+ When there is no use of filters or CTI flow differentation, the CTIflow ID used in the CTI messages is set to 0,\r
+ and there is no need to reference to a given CTIflow instance";\r
+ }\r
+ }\r
+\r
+ //DataType CTIConnProfile attributes\r
+ grouping CTIConnProfileGrp {\r
+ description "Attributes of Data Type CTIConnProfile";\r
+ leaf ctiConnProfileId {\r
+ type string;\r
+ mandatory true;\r
+ description "Unique (in O-DU) identifier for the profile";\r
+ }\r
+ leaf connectivityType {\r
+ type enumeration {\r
+ enum Ethernet {\r
+ description "Ethernet connectivity (no IP)";\r
+ }\r
+ enum UDPIP {\r
+ description "UDP/IP connectivity";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description "Type of connectivity associated with this Connectivity Profile";\r
+ }\r
+ leaf vlanTagForL2 {\r
+ when "../connectivityType='Ethernet'";\r
+ type or-types:vlan-id; // type is only used for the value, not for pointing to an interface itself\r
+ description "the VLAN tag to be used for CTI messages with the CTI server in case of Ethernet connectivity";\r
+ }\r
+ leaf vlanTagForL3and4 {\r
+ when "../connectivityType='UDPIP'";\r
+ type or-types:vlan-id; // type is only used for the value, not for pointing to an interface itself\r
+ description "the VLAN tag to be used for CTI messages with the CTI server in case of UDP/IP connectivity";\r
+ }\r
+ leaf ctiClientHost {\r
+ when "../connectivityType='UDPIP'";\r
+ type inet:host; // modified from local ip to host. type is only used for the value, not for pointing to an interface itself\r
+ description "a host on the O-DU to be used for CTI messages with the CTI server in case of UDP/IP connectivity";\r
+ }\r
+ }\r
+\r
+ //DataType CTIPattern attributes\r
+ grouping CTIPatternGrp {\r
+ description "Attributes of Data Type CTIPattern";\r
+ uses or-ctic:ctiPatternGrp;\r
+ }\r
+\r
+\r
+//Complete IM structure\r
+\r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction" {\r
+ if-feature or-features:CTI;\r
+ description "GNBDUFunction is augmented with child CTIFunction and its children elements";\r
+\r
+ list CTIFunction {\r
+ key id;\r
+ description "CTIFunction is top level of CTI functionality";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIFunction attributes";\r
+ uses CTIFunctionGrp;\r
+ }\r
+ list CTIClient {\r
+ key id;\r
+ description "CTIClient is child of GNBDUFunction";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIClient attributes";\r
+ uses CTIClientGrp ;\r
+ }\r
+ list CTISessionGroup {\r
+ key id;\r
+ description "CTISessionGroup is child of CTIClient";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTISessionGroup attributes";\r
+ uses CTISessionGroupGrp ;\r
+ }\r
+ list CTISession {\r
+ key id;\r
+ description "CTISession is child of CTISessionGroup";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTISession attributes";\r
+ uses CTISessionGrp ;\r
+ }\r
+ list CTIFlowsInUse {\r
+ key id;\r
+ description "CTIFlowsInUse is child of CTISession";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIFlowsInUse attributes";\r
+ uses CTIFlowsInUseGrp ;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ list CTIConfig {\r
+ key id;\r
+ max-elements 1;\r
+ description "CTIConfig is child of TBD";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIConfig attributes";\r
+ uses CTIConfigGrp ;\r
+ }\r
+ }\r
+ }\r
+\r
+ list CTIServer {\r
+ key id; // usually named 'id'\r
+ description "CTIServer is child of CTIConfig";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIServer attributes";\r
+ uses CTIServerGrp ;\r
+ }\r
+ list CTIFlow {\r
+ key id;\r
+ description "CTIFlow is child of CTIServer";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIFlow attributes";\r
+ uses CTIFlowGrp;\r
+ }\r
+ }\r
+ }\r
+\r
+ list CTIConnProfile {\r
+ key id; // usually named 'id'\r
+ description "CTIConnProfile is child of CTIConfig";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIConnProfile attributes";\r
+ uses CTIConnProfileGrp ;\r
+ }\r
+ }\r
+\r
+ list CTIPattern {\r
+ key id;\r
+ description "CTIPattern is child of CTIConfig";\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description "including CTIPattern attributes";\r
+ uses CTIPatternGrp ;\r
+ }\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-o1-subscription-control-me {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:o1:o-ran-o1-subscription-control-me";\r
+ prefix "or-scme";\r
+\r
+ import _3gpp-common-managed-element { prefix me3gpp; }\r
+ import o-ran-o1-subscription-control { prefix oransctrl; }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module is for supporting O1 aligned O-RAN subscription control for O-RAN defined notifications\r
+ for Managed Element.\r
+\r
+ Copyright 2021 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision 2021-09-15 {\r
+ description\r
+ "Initial version";\r
+ reference "O-RAN.WG5.MP.0-v01.00" ;\r
+ }\r
+\r
+ augment /me3gpp:ManagedElement {\r
+ description\r
+ "Augmentation of Managed element with O-RAN Subscription Control";\r
+ uses oransctrl:OranSubscriptionControlWrapper;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+ module o-ran-o1-subscription-control-subnetwork {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:o1:o-ran-o1-subscription-control-subnetwork";\r
+ prefix "or-scsn";\r
+\r
+ import _3gpp-common-subnetwork { prefix subnet3gpp; }\r
+ import o-ran-o1-subscription-control { prefix oransctrl; }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module is for supporting O1 aligned O-RAN subscription control for O-RAN defined notifications\r
+ for subnetwork.\r
+\r
+ Copyright 2021 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision 2021-09-15 {\r
+ description\r
+ "Initial version";\r
+ reference "O-RAN.WG5.MP.0-v01.00" ;\r
+ }\r
+\r
+ augment /subnet3gpp:SubNetwork {\r
+ description\r
+ "Augmentation of Sub network with O-RAN Subscription Control";\r
+ uses oransctrl:OranSubscriptionControlWrapper;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-o1-subscription-control {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:o1:o-ran-o1-subscription-control";\r
+ prefix "or-sctrl";\r
+\r
+ import _3gpp-common-top { prefix top3gpp; }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module is for supporting O1 aligned O-RAN subscription control for O-RAN defined notifications.\r
+\r
+ Copyright 2021 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision 2021-09-15 {\r
+ description\r
+ "Initial version";\r
+ reference "O-RAN.WG5.MP.0-v01.00" ;\r
+ }\r
+\r
+ identity o1NotificationTypes {\r
+ description "Base notification for O-RAN defined notification types";\r
+ }\r
+\r
+ identity o1NotifyMeasurementsResultsStats {\r
+ base "o1NotificationTypes";\r
+ description "O-RU measurements statistics notification";\r
+ }\r
+\r
+ identity o1NotifyCloudNFRegistration {\r
+ base "o1NotificationTypes";\r
+ description "cloudified NF registration notification";\r
+ }\r
+\r
+ grouping OranSubscriptionControlGrp {\r
+ description "Attributes of a specific notification subscription";\r
+\r
+ leaf notificationRecipientAddress {\r
+ type string;\r
+ mandatory true;\r
+ description\r
+ "Address of receipient of notification.\r
+ Please refer to TS 28.623";\r
+ }\r
+\r
+ leaf-list notificationTypes {\r
+ type identityref {\r
+ base "o1NotificationTypes";\r
+ }\r
+ description\r
+ "Defines the types of O-RAN-specified O1 notifications\r
+ that are forwarded to the notification recipient.";\r
+ }\r
+ }\r
+\r
+ grouping OranSubscriptionControlWrapper {\r
+ description\r
+ "Grouping for O-RAN subscription control.";\r
+\r
+ list OranSubscriptionControl {\r
+ key id;\r
+ description\r
+ "OranSubscriptionControlWrapper is dedicated to\r
+ O-RAN-specified O1 notifications only and can be set\r
+ independently of NtfSubscriptionControl from 3GPP.";\r
+\r
+ uses top3gpp:Top_Grp;\r
+ container attributes {\r
+ description\r
+ "Container for attributes of O-RAN Subscription Control";\r
+\r
+ uses OranSubscriptionControlGrp;\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-operations {
+ yang-version 1.1;
+ namespace "urn:o-ran:operations:1.0";
+ prefix "o-ran-ops";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ import ietf-hardware {
+ prefix hw;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG model used for O-RAN operations.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) Support for M-plane based TRX control for Network Energy Saving.
+ 2) Support for deep hibernate sleep mode";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of restart-call-home RPC
+ 2) Introduction of emergency-wake-up RPC and Notification";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 10.1.0
+
+ 1) Clarify description of max-call-home-attempts";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added current-datetime leaf";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions
+ 2) new schema node maximum-simultaneous-netconf-sessions";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) new leaf for max-call-home-attempts";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) new descriptions for NETCONF/TLS call home";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added pnfRegistration and VES header version fields";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added timezone-name
+ 2) added ru-instance-id
+ 3) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ typedef timezone-name {
+ type string;
+ description
+ "A time zone name as used by the Time Zone Database,
+ sometimes referred to as the 'Olson Database'.
+
+ The complete set of valid values is defined in
+ https://www.iana.org/time-zones.
+
+ The exact set of supported values is an
+ implementation-specific matter.";
+
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database
+ IANA Time Zone Database https://www.iana.org/time-zones ";
+ }
+
+ typedef version {
+ type string {
+ pattern '[0-9]+(\.[0-9]+){1,2}';
+ }
+ description
+ "this type definition is used to represent the version of the WG4
+ fronthaul interface.";
+ }
+
+ grouping operational-group {
+ description "operational grouping";
+
+// Container used for WG4 specific declarations
+ container declarations {
+ //FIXME - determine whether it is acceptable to WG4 to change this to a presence
+ //container, where the presence indicates the NETCONF server supports WG4
+ //defined functionality
+ config false;
+ description "WG4 Specific Declarations of supported version of standards";
+
+ leaf ru-instance-id {
+ type string;
+ must "re-match(current(), concat(/hw:hardware/hw:component/hw:mfg-name,
+ '_', /hw:hardware/hw:component/hw:model-name, '_',
+ /hw:hardware/hw:component/hw:serial-num ))";
+ description
+ "a unique instance identifier that may be used to identify a
+ particular hardware instance, e.g., when used performing hierarchical
+ management via the O-DU.";
+ }
+
+ leaf supported-mplane-version {
+ type version;
+ default "1.0.0";
+ description "Parameter provides highest M-Plane specification version device is compliant with.";
+ }
+
+ leaf supported-cusplane-version {
+ type version;
+ default "1.0.0";
+ description "Parameter provides highest CUS-Plane specification version device is compliant with.";
+ }
+
+ list supported-header-mechanism {
+ key protocol;
+ description "list provides information regarding type and version of headers.";
+
+ leaf protocol {
+ type enumeration {
+ enum ECPRI {
+ description
+ "Indicates that an O-RU supports the eCPRI header format
+ for the C/U plane";
+ }
+ enum IEEE-1914-3 {
+ description
+ "Indicates that an O-RU supports the 1914.3 header format
+ for the C/U plane";
+ }
+ }
+ description "Transport protocol type.";
+ }
+
+ leaf ecpri-concatenation-support {
+ when "../protocol = 'ECPRI'";
+ type boolean;
+ default false;
+ description
+ "This leaf is used to indicate whether the O-RU supports the optional
+ eCPRI concatenation capability";
+ }
+
+ leaf protocol-version {
+ type version;
+ default "1.0";
+ description "Header protocol version.";
+ }
+ }
+ leaf supported-common-event-header-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest commonEventheader version device is compliant with.";
+ }
+ leaf supported-ves-event-listener-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest vesEventListener version device is compliant with.";
+ }
+ leaf supported-pnf-registration-fields-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest pnfRegistrationFields version device is compliant with.";
+ }
+ leaf maximum-simultaneous-netconf-sessions {
+ type uint8 {
+ range "2..max";
+ }
+ default 2;
+ description
+ "The maximum number of simultaneous NETCONF sessions able to be supported by the O-RU";
+ }
+ }
+
+ container operational-state {
+ config false;
+ description
+ "Operational state for the O-RAN network element";
+ leaf restart-cause {
+ type enumeration {
+ enum POWER-ON {
+ description
+ "Equipment restarted because it was powered on";
+ }
+ enum SUPERVISION-WATCHDOG {
+ description
+ "Equipment restarted because it's supervision watchdog timer wasn't reset
+ by a NETCONF client (inferring loss of NETCONF connectivity)";
+ }
+ enum MPLANE-TRIGGERED-RESTART {
+ description
+ "Equipment restarted because of an M-plane issued RPC";
+ }
+ enum SOFTWARE-FAILURE {
+ description
+ "Equipment restarted because of software failure";
+ }
+ enum OTHER-WATCHDOG-TIMER {
+ description
+ "Equipment restarted because of some other non NETCONF watchdog timer";
+ }
+ enum DEEP-HIBERNATE-RESTART {
+ description
+ "Equipment restarted after deep-hibernate timer expiry";
+ }
+ enum UNKNOWN {
+ description
+ "The restart reason for the Equipment is unknown";
+ }
+ }
+ description "the cause for the last restart of the O-RAN Network Element";
+ }
+ leaf restart-datetime {
+ type yang:date-and-time;
+ description
+ "The system date and time when the system last restarted.";
+ }
+ leaf current-datetime {
+ type yang:date-and-time;
+ description
+ "An optional leaf to enable the O-RU to report its current system date and time.
+
+ O-RUs that support a realtime clock may use it to set its current-datetime.
+ O-RUs that support GNSS may use GNSS derived time to set its current-datetime.
+ Other O-RUs can set the current-datetime from PTP synchronization.
+
+ An O-RU may omit the leaf if its current-datetime is not set, e.g., using one
+ of the examples listed above.";
+ }
+ }
+
+
+// Common cross-WG container used for configuring clock and call home timers
+ container clock {
+ description
+ "System date and time properties used by all working groups.";
+
+ leaf timezone-name {
+ type timezone-name;
+ description
+ "An optional TZ database name to use for the system,
+ such as 'Europe/Stockholm'
+
+ Time zone name is an informative leaf and is NOT used in the
+ managed element to convert local time zone.
+
+ The managed element may include time zone name in measurement or
+ fault data.";
+ }
+
+ leaf timezone-utc-offset {
+ type int16 {
+ range "-720 .. 840";
+ }
+ units "minutes";
+ default 0;
+ description
+ "The number of minutes to add to UTC time to
+ identify the time zone for this system. For example,
+ 'UTC - 8:00 hours' would be represented as '-480'.";
+ }
+ }
+
+ leaf re-call-home-no-ssh-timer {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "A common timer used by the O-RAN equipment to trigger the repeated call
+ home procedure to all identified call home servers to which the O-RAN
+ equipment has not already an established NETCONF connection.
+
+ Irrespective of the name of the leaf, the timer applies equally to
+ call home procedures using NETCONF/SSH and those using NETCONF/TLS.
+
+ A value of 0 means that the O-RAN equipment shall disable operation
+ of the timer triggered NETCONF call home procedure.";
+ }
+
+ leaf max-call-home-attempts {
+
+ type uint8 {
+ range "0 .. 20";
+ }
+
+ description
+ "Maximum number of times for a O-RU to reattempt call home (repeat Call Home procedures) to each O-RU controller.
+ Please refer to M-plane clause 6.3 and 14.1.1 for detailed information.
+ Note: If this parameter is set with value zero
+ O-RU shall not repeat Call Home procedure to any O-RU controller";
+ }
+
+
+ }
+
+// Top level container
+
+ container operational-info{
+ description
+ "a collection of operational information for the O-RU";
+ uses operational-group;
+
+ }
+
+// RPCs
+
+ rpc reset {
+ 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.";
+
+ }
+
+ rpc restart-call-home {
+ if-feature "or-feat:CALL-HOME-REACTIVATION-SUPPORTED";
+ description
+ "This RPC allows any active 'call home O-RU Controller' having necessary permissions to
+ instruct O-RU to re-activate call home procedures. By acknowledging this RPC the O-RU
+ shall start call home towards all known 'call home O-RU Controllers' who do not have
+ active M-Plane session at the moment.
+ This RPC should not be rejected nor NACKed by the O-RU that supports feature
+ CALL-HOME-REACTIVATION-SUPPORTED";
+ }
+
+ rpc emergency-wake-up {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "M-Plane triggered abort of current sleep mode.
+ A server shall send a notification to the client after wake-up completion.";
+
+ input {
+ leaf-list sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.
+ When present, the wake-up operation is applicable to the resources of each sro-id in the list.
+ When absent, the wake-up operation is applicable to the whole O-RU.";
+ }
+ }
+ output {
+ list operational-status {
+ key index;
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list.";
+ }
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Wake-up operation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Wake-up operation cannot be started because of error.";
+ }
+ }
+ description
+ "Status of the emergency-wake-up operation.
+ When ../sro-id is present, this leaf refers to the status of emergency-wake-up operation for corresponding sro-id's resources.
+ When ../sro-id is absent, this leaf refers to the status of emergency-wake-up operation for the whole O-RU.";
+ }
+
+ description
+ "List of emergency-wake-up operational status";
+ }
+ }
+ }
+
+ rpc deep-hibernate {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ description
+ "M-Plane triggered deep-hibernate sleep mode.";
+
+ input {
+ leaf hibernate-time {
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Time duration for which the O-RU shall be in deep-hibernation.
+ An O-RU shall reject any deep-hibernate RPC where the hibernate-time duration
+ exceeds the value of max-hibernate-time-duration advertised by the O-RU.";
+ }
+ }
+
+ output {
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Deep-hibernate mode activation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Deep-hibernate mode activation cannot be started because of error.";
+ }
+ }
+ description
+ "Status of the deep-hibernate operation.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+ }
+ }
+
+ notification emergency-wake-up-complete {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "M-Plane notification event to notify the completion of emergency wake-up operation.";
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.
+ When present, the notification is applicable for a particular sro-id.
+ When absent, the notification is applicable for the whole O-RU.";
+ }
+ }
+
+ notification deep-hibernate-activated {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ description
+ "M-Plane notification event to notify the activation of deep-hibernate sleep mode in O-RU.";
+ leaf hibernate-time {
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Time duration for which the O-RU shall be in deep-hibernation.";
+ }
+ }
+}
--- /dev/null
+module o-ran-performance-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:performance-management:1.0";
+ prefix "o-ran-pm";
+
+ import ietf-yang-types {
+ prefix "yang-types";
+ }
+
+ // import identifier for O-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 port-number
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ // import ru-mac-address, o-du-mac-address and vlan-id
+ import o-ran-processing-element {
+ prefix "o-ran-elements";
+ }
+
+ import o-ran-file-management {
+ prefix "o-ran-file-mgmt";
+ }
+
+ import iana-hardware {
+ prefix ianahw;
+ }
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration for performance measurement for
+ transceiver and rx-window measurement objects.
+
+ NOTE, whereas this YANG model may define support of schema nodes associated
+ with O-RU measurements as optional, the CU-Plane specification may further
+ specify whether, according to a particular version of the CU plane
+ specification, which specific measurements are mandatory to support
+ from an O-RU perspective. In such a situation, the definition of mandatory
+ performance counters in sub-section 9.1 of the CU-plane specification shall
+ take precedence.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2024-08-12 {
+ description
+ "version 16.0.0
+
+ 1) add TSSI measurements.
+ 2) add RSSI measurements.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision 2024-04-15 {
+ description
+ "version 15.0.0
+
+ 1) add fequency bin as optional report for EPE statistics.
+ 2) added new VSWR measurments.
+ 3) new report-info capabilities.
+ 4) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision 2023-12-11 {
+ description
+ "version 14.0.0
+
+ 1) Make the leafref refering a measurement-object optional using
+ statement 'require-instance false'.
+ 2) Align YANG model descriptions with schema.
+ 3) Added shared cell performance counters";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision 2023-08-14 {
+ description
+ "version 8.2.0
+
+ 1) EPE measurement report correction.";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2022-08-15 {
+ description
+ "version 8.1.0
+
+ 1) style guide corrections.
+ 2) changed import prefix for o-ran-file-management.";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-12-01 {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) deprecating leaf-list frequency-table and replacing with frequency-bin-table
+ 3) Add support for multiple transport-session-type per O-RU";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-07-26 {
+ description
+ "version 7.0.0
+
+ 1) added new EPE measurements - VOLTAGE and CURRENT
+ 2) added data-direction to rx-window measurements
+ 3) added ability to report multiple measurements in notifications
+ 4) added new symbol TD-RSSI measurements
+ 5) added FTPES file upload support ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-03-22 {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision 2020-12-10 {
+ description
+ "version 5.0.0
+
+ 1) container epe-stats is changed deprecated
+ 2) New list epe-statistics and measurement-object is added as key
+ 3) bug fix by pyang --lint";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) updated top-level model description concerning optionality of measurements
+ 2) added new rx window counters
+ 3) added new TX stats measurements
+ 4) added new EPE measurements
+ 5) fixed typo in enumeration - TX_POPWER
+ 6) introduced config false data indicating which type of measurements are supported";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added new measurement objects for QSFP
+ 2) backward compatible changes to correct sFTP Server Authentication.
+ 3) simplifying file management and authentication to reuse from o-ran-file-management module
+ 4) minor fixes according to lack of descriptions and reference
+ 5) added to descriptions to indicate applicability of leafs and Containers
+ to separate O-RAN use cases
+ 6) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature GRANULARITY-TRANSPORT-MEASUREMENT {
+ description
+ "This feature indicates that the O-RU supports an optional object-unit TRANSPORT in rx-window-measurement.";
+ }
+
+ feature GRANULARITY-EAXC-ID-MEASUREMENT {
+ description
+ "This feature indicates that the O-RU supports an optional object-unit EAXC_ID in rx-window-measurement.";
+ }
+
+ typedef transceiver-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 that might be supported/configured for
+ transceiver measurement object.";
+ }
+
+ typedef transceiver-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 function that might be supported/configured for
+ transceiver measurement object.";
+ }
+
+ typedef epe-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value 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 that might be supported/configured for
+ EPE measurement object.";
+ }
+
+ typedef symbol-rssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value 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 that might be supported/configured for
+ symbol RSSI measurement object.";
+ }
+
+ typedef tssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description
+ "The reporting info that might be supported/configured for
+ TSSI measurement object.";
+ }
+
+ typedef rssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description
+ "The reporting info that might be supported/configured for
+ RSSI measurement object.";
+ }
+
+ typedef tx-antenna-report-info {
+ type enumeration {
+ enum AVERAGE {
+ description
+ "To report average value within the measurement-interval
+ for the measurement-object.";
+ }
+ enum STD_DEVIATION {
+ description
+ "To report standard deviation value within the measurement-interval
+ for the measurement-object.";
+ }
+ enum MAXIMUM {
+ description
+ "To report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MAXIMUM_AND_TIME {
+ description
+ "To report maximum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "To report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM_AND_TIME {
+ description
+ "To report minimum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST {
+ description
+ "To report first value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST_AND_TIME {
+ description
+ "To report first value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST {
+ description
+ "To report latest value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST_AND_TIME {
+ 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 that might be supported/configured for
+ tx antenna measurement object.";
+ }
+
+ typedef tx-antenna-object-unit {
+ type enumeration {
+ enum ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id - array element";
+ }
+ enum CONNECTOR_BAND {
+ description
+ "Unit to measure the performance per object-id - connector and band";
+ }
+ }
+ description "The object units that might be supported/configured for
+ tx antenna measurement object.";
+ }
+
+ 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 epe-measurement-result-grouping {
+ description
+ "energy, power and environmental measurement-result are listed for O-RU";
+
+ list epe-measurement-result {
+ key "object-unit-id";
+ config false;
+ status deprecated;
+ description
+ "energy power and environmental measurement results
+
+ this list is deprecated as the leaf object-unit-id actually
+ refers to an object-unit. It is replaced with
+ the new list epe-measurement-resultv2";
+ leaf object-unit-id {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:class";
+ }
+
+ description
+ "the hardware component type is used for the object-unit-id for the
+ EPE measurements. For example, the object-unit-id will be set to
+ or-hw:O-RAN-RADIO if the measurement applies to the complete O-RU
+ self-contained sub-system.
+
+ Other hardware-classes include: or-hw:O-RU-POWER-AMPLIFIER,
+ ianahw:power-supply, ianahw:fan, ianahw:cpu";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurement-object";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "maximum value for the measurement-object";
+ }
+ leaf average {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "average value of the measurement-object";
+ }
+ }
+
+ list epe-measurement-resultv2 {
+ key "object-unit-id";
+
+ config false;
+ description
+ "energy power and environmental measurement results
+
+ this list replaces the deprecated list epe-measurement-result";
+ leaf object-unit-id {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the hardware component name is used for the object-unit-id for the
+ EPE measurements. For example, the object-unit-id will be set to
+ the name of the component with class or-hw:O-RU-POWER-AMPLIFIER
+ to refer to a particular power amplifer instance.";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurement-object";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "maximum value for the measurement-object";
+ }
+ leaf average {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "average value of the measurement-object";
+ }
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ }
+
+
+ }
+
+ 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/o-ran-int:port-reference/o-ran-int: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 measurement-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 measurement-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;
+ status deprecated;
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-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 results 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 O-RU module or one of its child ports
+ in ietf-hardware/component is used when O-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 O-RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ leaf name{
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats. Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 DU-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 data-direction {
+ type enumeration {
+ enum DL {
+ description
+ "reported measurement refers to control plane messages with dataDirection bit = 1.";
+ }
+ enum UL {
+ description
+ "reported measurement refers to control plane messages with dataDirection bit = 0.";
+ }
+ enum DLUL {
+ description
+ "reported measurement refers to control plane messages irrespective of dataDirection bit setting.";
+ }
+ }
+ description
+ "An optional leaf used when reporting rx window measurement associated with
+ control plane messages. See CUS-Plane Specification for more details of the dataDirection bit.
+
+ When not present and reporting rx window measurement associated with control plane messages,
+ the receiving entity can assume that the reported control plane rx window measurement refers
+ to control plane messages irrespective of dataDirection bit setting.
+
+ Can be ignored when received in rx window measurements not corresponding to control plane messages.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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";
+ }
+ }
+
+ grouping tx-measurement-result-grouping{
+ description
+ "Group of measurement results for tx stats";
+
+ choice object-unit-id {
+ config false;
+ case RU {
+ leaf name{
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the name of O-RU module or one of its child ports
+ in ietf-hardware/component is used when O-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 tx stats per O-RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ leaf name{
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the tx stats.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the tx stats.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the tx stats.";
+ }
+
+ description
+ "the number of data packet are counted for the tx 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 tx stats.
+ EAXC_ID consists of DU-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 tx stats.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ description
+ "the number of data packet are counted for the tx stats per EAXC-ID.";
+ }
+ }
+
+ description
+ "measurement-result for the tx stats depends on the
+ configured object-unit, RU, TRANSPORT or EAXC_ID";
+ }
+ }
+
+ grouping shared-cell-measurement-result-grouping {
+ description
+ "Group of measurement results for shared-cell measurements";
+
+ choice object-unit-id {
+ config false;
+ case TRANSPORT{
+ list pe-measured-result {
+ key "processing-elements";
+ description
+ "the measurement results are counted per processing-element.";
+ leaf processing-elements {
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "Procesing elements are used to count for shared-cell stats,
+ where the processing element name refers to a list entry
+ containing a south-eth-flow container.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+ description
+ "the number of packets are counted for shared-cell stats.";
+ }
+ }
+ description
+ "the number of packets are counted for shared-cell stats per TRANSPORT.";
+ }
+ description
+ "measurement-result for shared-cell stats depnds on the configured object-unit,
+ TRANSPORT or other one for the future purpose.";
+ }
+ }
+
+ grouping symbol-rssi-measurement-result-grouping {
+
+ description
+ "symbol-rssi-measurement-result is the time domain RSSI per symbol,
+ the reference point for the TD-RSSI shall be the antenna connector of the O-RU.
+ The value of Received Signal Strength Indicator(RSSI) per rx-array-carrier per configured OFDM symbol is measured.
+ the RSSI shall be calculated as the linear average of the total received power observed in the configured
+ OFDM symbol in the measurement bandwidth from all sources including co-channel serving and non-serving cells,
+ adjacent channel interference, thermal noise etc., over the total number of antenna elements of the array.
+ The unit of the reported RSSI is dBm.
+ If analogue or hybrid beamforming is enabled, the beamId used for RSSI measurement is:
+ - When there is allocation of a beamId in this symbol, O-RU use that beamId for RSSI measurement;
+ - When there is no allocation of a beamId in this symbol, it is up to O-RU implementation, for example,
+ the O-RU can choose to use a common beamId or use a previous allocated beamId";
+
+ list symbol-rssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+
+ description
+ "rx-array-carrier is used for the object-unit-id for the
+ symbol-rssi-measurement-result, for which object-unit is RX-ARRAY-CARRIER only.
+ this measurement is only supported by the rx-array-carriers which are configured with single numerology.
+ an O-RU shall reject any configuration for an object-unit-id that references a mixed numerology array carrier.";
+ }
+
+ list per-symbol-index-result {
+ key "symbol-index";
+ description
+ "the symbol index for the measurement result";
+
+ leaf symbol-index{
+ type uint16;
+
+ description
+ "symbol-index is the symbol indexes within a configured 'period', These symbols include
+ - all UL symbols within a configured number of slots if measurement-object is ALL-UL-SYMBOLS,
+ and the UL symbols are decided by 'configurable-tdd-pattern', 'static-srs-configuration', 'static-prach-configuration',
+ and 'dataDirection' in the C-plane messages.
+ - configured symbols by 'symbol-index' within a configured 'period' if measurement-object is CONFIGURED-SYMBOLS,
+ If a c-plane message indicates a symbol within the 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure RSSI on this symbol";
+ }
+
+ container min {
+ description
+ "minimum value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "minimum value for the TD-RSSI measurement in dBm";
+ }
+ }
+
+ container max {
+ description
+ "maximum value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "maximum value for the TD-RSSI measurement in dBm";
+ }
+ }
+
+ container avg {
+ description
+ "average value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "the dBm value of the linear average of TD-RSSI [Watt] value across the symbols with same symbol-index
+ if same symbol-index occurs multiple times within a given measurement interval.";
+ }
+ }
+
+ leaf-list frequency-table {
+ type uint32;
+ status deprecated;
+ 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";
+ }
+
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ }
+ description
+ "measurement-result for the symbol-wise TD-RSSI depends on the
+ configured object-unit, RX-ARRAY-CARRIER";
+ }
+ }
+
+ grouping tssi-measurement-result-grouping {
+ description
+ "The status information are listed for each O-RU's Tx array carrier";
+ list tssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ description
+ "Measurement result of tssi per measurement-object";
+
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-array-carriers/up:name";
+ }
+ description
+ "tx-array-carrier is used for the object-unit-id for the tssi-measurement-result.";
+ }
+
+ list per-tx-array-element-index-result {
+ key "tx-array tx-array-element";
+ description
+ "This list indicates the status information related to the Tx array element supported by the O-RU array carrier.";
+
+ leaf tx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-arrays/up:name";
+ }
+ description "Name of tx-array; part of the measurement object identifier.";
+ }
+
+ leaf tx-array-element {
+ type uint32;
+ description
+ "This leaf indicates the identifier of the configured Tx array element in tx-array.";
+ }
+
+ container avg {
+ description
+ "average value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "the dBFS value of the linear average of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element";
+ }
+ }
+
+ container min {
+ description
+ "minimum value for the measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "Min value of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element.";
+ }
+ }
+
+ container max {
+ description
+ "maximum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "Max value of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping rssi-measurement-result-grouping {
+ description
+ "The status information are listed for each O-RU's Rx array carrier";
+ list rssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ description
+ "Measurement result of rssi per measurement-object";
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+ description
+ "rx-array-carrier is used for the object-unit-id for the rssi-measurement-result.";
+ }
+ list per-rx-array-element-index-result {
+ key "rx-array rx-array-element";
+ description
+ "This list indicates the status information related to the Rx carriers supported by the O-RU array element.";
+ leaf rx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-arrays/up:name";
+ }
+ description "Name of rx-array; part of the measurement object identifier.";
+ }
+ leaf rx-array-element {
+ type uint32;
+ description
+ "This leaf indicates the identifier of the configured Rx array element.";
+ }
+ container avg {
+ description
+ "average value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ container min {
+ description
+ "minimum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ container max {
+ description
+ "maximum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ }
+ }
+ }
+
+ grouping tx-antenna-measurement-result-grouping {
+ description
+ "tx-antenna-measurement-result listed per array element or connector and band.";
+
+ grouping tx-antenna-measurement-values-grouping {
+ description
+ "The grouping of tx antenna measurement values";
+
+ container avg {
+ description
+ "Average value is included for the measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Latest value of the measurement-object.";
+ }
+ }
+ container std-deviation {
+ description
+ "Standard deviation value is included for the measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Standard deviation value of the measurement-object.";
+ }
+ }
+ container min {
+ description
+ "Minimum value with optionally recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Minimum value for the measurement-object is provided
+ if MINIMUM or MINIMUM_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the minimum value is provided
+ if MINIMUM_AND_TIME report-info is selected.";
+ }
+ }
+ container max {
+ description
+ "Maximum value with optionally recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Maximum value for the measurement-object is provided
+ if MAXIMUM or MAXIMUM_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the maximum value is provided
+ if MAXIMUM_AND_TIME report-info is selected.";
+ }
+ }
+ container first {
+ description
+ "First value with optinally the recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "First value of the measurement-object is provided
+ if FIRST or FIRST_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the first value is provided
+ if FIRST_AND_TIME report-info is selected.";
+ }
+ }
+ container latest {
+ description
+ "Latest value with optionally the recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Latest value of the measurement-object is provided
+ if LATEST or LATEST_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the latest value is provided
+ if LATEST_AND_TIME report-info is selected.";
+ }
+ }
+
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "Frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound.";
+ }
+ }
+
+ choice object-unit-id {
+ config false;
+ case ARRAY_ELEMENT {
+ list tx-antenna-measurement-result-array-element {
+ key "tx-array tx-array-element";
+ config false;
+ leaf tx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-arrays/up:name";
+ }
+ description "Name of tx-array; part of the measurement object identifier.";
+ }
+
+ leaf tx-array-element {
+ type uint32;
+
+ description
+ "Array element number within the tx-array identified by object-unit-id-array; part of the measurement object identifier.
+ Allowed values and semantic - as per CUS-Plane spec, clause 'Identification and Ordering of Array Elements'.";
+ }
+
+ uses tx-antenna-measurement-values-grouping;
+
+ description
+ "List of tx antenna measurement results";
+ }
+ }
+ case CONNECTOR_BAND {
+ list tx-antenna-measurement-result-connector-band {
+ key "related-o-ru-connector band-number";
+ config false;
+
+ leaf related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-FEEDER')";
+ description
+ "Provides information about O-RU connector related to the measurement.";
+ }
+
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "Provides information about frequency band related to the measurement.";
+ }
+ uses tx-antenna-measurement-values-grouping;
+
+ description
+ "List of tx antenna measurement results";
+ }
+ }
+ description
+ "measurement-result for tx-antenna stats depends on the configured object-unit,
+ ARRAY_ELEMENT or CONNECTOR_BAND.";
+ }
+ }
+
+ grouping measurement-group {
+ description
+ "Group of measurement results";
+
+ uses measurement-capabilities;
+ leaf enable-SFTP-upload {
+ type boolean;
+ default false;
+ status deprecated;
+ description
+ "Flag to enable upload of performance measurement result files.";
+ }
+
+ leaf enable-file-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files.
+ A single schema node is used to enable/disable file uploads
+ over either SFTP or FTPES with the format of the upload
+ path being used to signal which protocol to use.
+
+ An O-RU receiving this schema node should ignore the deprecated
+ enable-SFTP-upload schema node, if received.";
+ }
+
+ 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;
+ status deprecated;
+ 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 be uploaded.
+ The following format is possible:
+ sftp://<username>@<host>[:<port>]/path";
+ }
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+ list remote-file-uploads {
+ key remote-file-upload-path;
+ description
+ "file upload can be done to one or more than one file servers
+
+ An O-RU receiving this list should ignore the deprecated
+ remote-SFTP-uploads list, if received";
+
+ leaf remote-file-upload-path {
+ type inet:uri;
+ description
+ "URI specifying the remote location where the files are to be uploaded.
+
+ When upload is via SFTP, the format shall be of the form
+ sftp://<username>@<host>[:port]/path
+ When upload is via FTPES, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES";
+ }
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+// transceiver measurements applicable to all O-RAN HW functions
+
+ leaf transceiver-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the performance of transceiver
+ measurement objects periodically.";
+ }
+
+// EPE measurements applicable to all O-RAN HW functions
+
+ leaf epe-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the energy, power and environmental
+ measurement objects periodically.";
+ }
+
+// RX Window measurements applicable to O-RAN WG4 defined functions
+
+ leaf rx-window-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the performance of reception
+ window measurement objects periodically.";
+ }
+
+ leaf tx-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the tx (outbound)
+ window measurement objects periodically.";
+ }
+
+ leaf shared-cell-measurement-interval {
+ if-feature feat:SHARED-CELL-STATS;
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the shared-cell measurement objects periodically.";
+ }
+
+ leaf symbol-rssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the symbol-wise TD-RSSI measurement objects periodically.";
+ }
+
+ leaf tssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the tx TSSI measurement objects periodically.";
+ }
+
+ leaf rssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the RSSI measurement objects periodically.";
+ }
+
+ leaf tx-antenna-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the tx antenna measurement objects periodically.";
+ }
+
+ leaf notification-interval {
+ type uint16;
+ units seconds;
+ description
+ "notification interval for the measurement result to be notified
+ periodically.";
+ }
+
+ leaf file-upload-interval {
+ type uint16;
+ units seconds;
+ description
+ "file upload interval for the measurement result file to be
+ uploaded periodically.";
+ }
+
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ status deprecated;
+ description
+ "indicates the maximum value of configurable bin-count for frequency
+ table in transceiver-measurement-objects as one of module
+ capabilities.
+
+ This leaf is deprecated and replaced with the max-bin-count in the
+ transceiver-objects list.";
+ }
+
+ list transceiver-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report transceiver measurements
+ applicable to any O-RAN defined hardware function";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_POWER {
+ description
+ "Measured Rx input power in mW for SFP or lane 1 of QSFP";
+ }
+ enum RX_POWER_LANE_2 {
+ description
+ "Measured Rx input power in mW for lane 2 of QSFP";
+ }
+ enum RX_POWER_LANE_3 {
+ description
+ "Measured Rx input power in mW for lane 3 of QSFP";
+ }
+ enum RX_POWER_LANE_4 {
+ description
+ "Measured Rx input power in mW for lane 4 of QSFP";
+ }
+ enum TX_POPWER {
+ status deprecated;
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_POWER {
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_POWER_LANE_2 {
+ description
+ "Measured Tx input power in mW for lane 2 of QSFP";
+ }
+ enum TX_POWER_LANE_3 {
+ description
+ "Measured Tx input power in mW for lane 3 of QSFP";
+ }
+ enum TX_POWER_LANE_4 {
+ description
+ "Measured Tx input power in mW for lane 4 of QSFP";
+ }
+ enum TX_BIAS_COUNT {
+ description
+ "Internally measured Tx Bias Current in mA for SFP or lane 1 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_2 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 2 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_3 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 3 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_4 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 4 of QSFP";
+ }
+ 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 transceiver-report-info;
+ 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 transceiver-function;
+
+ description
+ "the value to be recorded for transceiver-measurement
+ by real value or log 10.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ 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;
+// configuration and measurement result for the transceiver-measurement
+
+ }
+
+ list rx-window-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report RX Window measurements
+ applicable to O-RAN WG4 define O-RU functions";
+ 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 {
+ status deprecated;
+ 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 packets (data and control) within the measurement period.";
+ }
+ enum RX_ON_TIME_C {
+ description
+ "the number of control packets, received on time within
+ the reception window.";
+ }
+ enum RX_EARLY_C {
+ description
+ "the number of control packets, received before
+ the reception window.";
+ }
+ enum RX_LATE_C {
+ description
+ "the number of control packets, received after
+ the reception window.";
+ }
+ enum RX_SEQID_ERR {
+ description
+ "the number of data packets, received with an erroneous sequence ID.";
+ }
+ enum RX_SEQID_ERR_C {
+ description
+ "the number of control packets, received with an erroneous sequence ID.";
+ }
+ enum RX_ERR_DROP {
+ description
+ "The total number of inbound messages which are discarded by the receiving
+ O-RAN entity for any reason.";
+ }
+ }
+ 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 hardware component.
+ This may be the parent 'module' or child 'port' component.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the reception window stats are counted per transport flow.
+ When there are multiple transport flows between O-DU and O-RU,
+ e.g. multiple sets of o-du-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 O-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 received data packet.
+ This configuration is allowed only when O-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;
+// configuration and measurement result for the reception window stats
+
+ }
+
+
+ list tx-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report TX measurements
+ applicable to O-RAN WG4 define O-RU functions";
+ leaf measurement-object {
+ type enumeration {
+ enum TX_TOTAL {
+ description
+ "the number of outbound packets (data and control), transmitted within
+ the measurement period";
+ }
+ enum TX_TOTAL_C {
+ description
+ "the number of outbound control packets, transmitted within
+ the measurement period.
+ This counter is required only if RU supports LAA/LBT capabilities.";
+ }
+ }
+ description
+ "CU-plane transmission counters";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the measurement per measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RU {
+ description
+ "the transmission stats are counted per hardware component.
+ This may be the parent 'module' or child 'port' component.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the transmission stats are counted per transport flow.
+ When there are multiple transport flows between O-DU and O-RU,
+ e.g. multiple sets of o-du-mac-address, ru-mac-address and
+ vlan-id, the transmission stats per transport flow
+ are counted in this case.
+ This configuration is allowed only when O-RU supports
+ a feature GRANULARITY-TRANSPORT-MEASUREMENT.";
+ }
+ enum EAXC_ID {
+ if-feature GRANULARITY-EAXC-ID-MEASUREMENT;
+
+ description
+ "the transmission stats are counted per eAxC ID, which is
+ used in the header of received data packet.
+ This configuration is allowed only when O-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 tx-measurement-result-grouping;
+ // configuration and measurement result for the tx stats
+
+ }
+
+ list shared-cell-measurement-objects {
+ if-feature feat:SHARED-CELL-STATS;
+ key "measurement-object";
+ description
+ "optional list used to report shared-cell measurements.";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_UP_UL {
+ description
+ "the number of received U-Plane data packets in UL direction, corresponds to shared-cell-combine-entity.
+ Refer to WG4 CUS secification clause 9.1.";
+ }
+ enum RX_UP_UL_COMBINED {
+ description
+ "the number of U-Plane data packets, which is processed by combine functional block.
+ Refer to WG4 CUS secification clause 9.1.";
+ }
+ }
+ description
+ "target metric to measure shared-cell operation.";
+ }
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per port
+ measurement object.";
+ }
+ leaf object-unit {
+ type enumeration {
+ enum TRANSPORT {
+ description
+ "unit to measure the performance per object-id,
+ the shared-cell stats are counted per TRANSPORT.";
+ }
+ }
+ 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 shared-cell stats.";
+ }
+ }
+ description
+ "The reporting info to the measurement object.";
+ }
+ uses shared-cell-measurement-result-grouping;
+// configuration and measurement result for the shared-cell stats
+ }
+
+ list epe-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report energy, power and environmental
+ measurements applicable to any O-RAN defined hardware function";
+ leaf measurement-object {
+ type enumeration {
+ enum TEMPERATURE {
+ description
+ "Measured temperature in degrees Celsius";
+ }
+ enum POWER {
+ description
+ "Measured power consumed, in watts (W)";
+ }
+ enum VOLTAGE {
+ description
+ "Measured voltage, in volts (V)";
+ }
+ enum CURRENT {
+ description
+ "Measured current consumption, in amperes (A)";
+ }
+ }
+ description "Target metric to measure the performance";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf object-unit {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:class";
+ }
+ description
+ "the hardware component type is used for the object-unit for the
+ EPE measurements. For example, the object-unit will be set to
+ or-hw:O-RU-POWER-AMPLIFIER if the measurement relates to
+ O-RU power amplifiers.
+
+ Other hardware-classes include:
+ ianahw:power-supply, ianahw:fan, ianahw:cpu";
+ }
+
+ leaf-list report-info {
+ type epe-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf bin-count {
+ type uint16;
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+ 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 epe-measurement-result-grouping;
+ // configuration and measurement result for the epe-measurement
+
+ }
+
+ list symbol-rssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report symbol-wise time domain RSSI for all UL symbols or configured symbols";
+
+ leaf measurement-object {
+ type enumeration {
+ enum ALL-UL-SYMBOLS {
+ description
+ "Measure and report symbol-rssi separately for all UL symbols in every configured number of slots (as defined by 'period' in 'symbol-rssi-measurement-objects'.
+ And the UL symbols are decided by 'configurable-tdd-pattern', 'static-srs-configuration', 'static-prach-configuration',
+ and 'dataDirection' in the C-plane messages.
+ This option is recommended for static TDD case. If this option is used in dynamic TDD case, then O-RU measures
+ only the allocates UL symbols because O-RU may not know 'candidate UL symbols' which are not allocated. ";
+ }
+
+ enum CONFIGURED-SYMBOLS {
+ description
+ "Measure and report symbol-rssi separately for all configured symbols as defined by the leaf-list 'symbol-index',
+ This can be used for non-dynamic TDD as well as dynamic TDD cases,
+ the O-RU should measure all configured symbols, irrespective of whether the UL symbol is allocated or not,
+ If a c-plane message indicates a symbol within this 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure RSSI on this symbol.";
+ }
+ }
+ description "Target metric to measure the symbol-rssi";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RX-ARRAY-CARRIER {
+ description
+ "unit to measure the performance per object-id,
+ only the rx-array-carriers which are not configured with mixed numerology will be measured";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ list per-rx-array-carrier-configuration {
+ key "rx-array-carrier";
+ description
+ "measurement configuration per rx-array-carrier to accommodate different Subcarrier Spacing
+ and TDD pattern per rx-array-carrier, and only the symbol-wise TD-RSSI of the rx-array-carriers
+ included in per-rx-array-carrier-configuration will be measured and reported";
+
+ leaf rx-array-carrier {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+ description "reference to the name of rx-array-carriers";
+ }
+
+ leaf period {
+ type uint16;
+
+ description
+ "the number of slots that correspond to the period of a TDD-Configuration,
+ and the start point of the 1st period is subframe#0, slot#0 of the 1st even number radio frame after this configuration is received,
+ here even number radio frame is used because according to 3GPP TS 38.213, A UE expects that P1 + P2 divides 20 msec";
+ }
+
+ leaf-list symbol-index {
+ type uint16;
+
+ description
+ "the index of the symbols within 'period'. The first symbol within the 'period is symbol-index=0, next symbol is symbol-index =1 etc.
+ This symbol-index is different from how symbolId is defined in CUS plane spec.
+ These symbols are configured for O-RU to measure and report symbol-wise rssi,
+ used only when 'measurement-object' = 'CONFIGURED-SYMBOLS'.
+ If a c-plane message indicates a symbol within this 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure rssi on this symbol";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the symbol-rssi measurement per Object";
+ }
+
+ leaf-list report-info {
+ type symbol-rssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ leaf lower-bound {
+ type int16;
+ units dBm;
+ description
+ "the lower value of the first bin of frequency table.";
+ }
+
+ leaf upper-bound {
+ type int16;
+ units dBm;
+ description
+ "the upper value of the last bin of frequency table.";
+ }
+ }
+
+ uses symbol-rssi-measurement-result-grouping;
+ // configuration and measurement result for the symbol-rssi-measurement
+ }
+
+ list tssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report time domain TSSI for per tx-array-carrier on specific tx-array-element.";
+ leaf measurement-object {
+ type enumeration {
+ enum TSSI-IQ-POWER-LEVEL {
+ description
+ "Measured TSSI (Transmit Signal Strength Indicator) digital IQ Power level for each Tx array carrier on the specific array element";
+ }
+ }
+ description "Target metric to measure the tssi";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the TSSI measurement per object";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum CARRIER_ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id.";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ leaf-list report-info {
+ type tssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+ uses tssi-measurement-result-grouping;
+ // configuration and measurement result for the tssi-measurement
+ }
+
+ list rssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report time domain RSSI for per rx-array-carrier on specific rx-array-element.";
+ leaf measurement-object {
+ type enumeration {
+ enum RSSI {
+ description
+ "Measured RSSI (Received Signal Strength Indicator) for each Rx array carrier on the specific array element in dbm";
+ }
+ }
+ description "Target metric to measure the rssi";
+ }
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the RSSI measurement per object";
+ }
+ leaf object-unit {
+ type enumeration {
+ enum CARRIER_ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id.";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+ leaf-list report-info {
+ type rssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+ uses rssi-measurement-result-grouping;
+ // configuration and measurement result for the rssi-measurement
+ }
+
+ list tx-antenna-measurement-objects {
+ key "measurement-object";
+ description
+ "Optional list used to report tx-antenna measurements.";
+ leaf measurement-object {
+ type enumeration {
+ enum VSWR {
+ description
+ "Measure and report values of VSWR.";
+ }
+ }
+ description "Target metric to measure the tx-antenna measurements.";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf-list report-info {
+ type tx-antenna-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf object-unit {
+ type tx-antenna-object-unit;
+ mandatory true;
+ description "Unit to measure the performance per object-id.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "The number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ 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 tx-antenna-measurement-result-grouping;
+// configuration and measurement result for the tx-antenna-measurement
+
+ }
+
+ }
+
+ grouping measurement-capabilities {
+ description "a measurement capabilities grouping";
+ container measurement-capabilitites {
+ config false;
+ description "the type of measurement objects supported by the O-RU";
+
+ list transceiver-objects {
+ key measurement-object;
+ description "list of transceiver objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/transceiver-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type transceiver-report-info;
+ description "The reporting info supported by this measurement object.";
+ }
+ leaf-list function {
+ type transceiver-function;
+ description "The function supported by this measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in transceiver-measurement-objects.";
+ }
+ }
+ list rx-window-objects {
+ key measurement-object;
+ description "list of rx window objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rx-window-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list tx-stats-objects {
+ key measurement-object;
+ description "list of tx stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list shared-cell-stats-objects {
+ if-feature feat:SHARED-CELL-STATS;
+ key measurement-object;
+ description "list of shared-cell stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/shared-cell-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list epe-stats-objects {
+ key "measurement-object";
+ description
+ "An optional list describing the energy, power and environmental measurements supported
+ by the O-RU. Measurements are defined per hardware component.";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/epe-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list component-class {
+ type identityref {
+ base ianahw:hardware-class;
+ }
+ description
+ "An indication of the general hardware type of the
+ component for which EPE measurements are supported.";
+
+ }
+ leaf-list report-info {
+ type epe-report-info;
+ description "The reporting info supported of this measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in epe-measurement-objects.";
+ }
+ }
+
+ list symbol-rssi-stats-objects {
+ key measurement-object;
+ description "list of symbol-wise TD-RSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/symbol-rssi-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type symbol-rssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in symbol-rssi-stats-objects.";
+ }
+ }
+
+ list tssi-stats-objects {
+ key measurement-object;
+ description "list of TSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tssi-measurement-objects/measurement-object";
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type tssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ }
+
+ list rssi-stats-objects {
+ key measurement-object;
+ description "list of RSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rssi-measurement-objects/measurement-object";
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type rssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ }
+
+ list tx-antenna-stats-objects {
+ key measurement-object;
+ description "list of tx antenna objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-antenna-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+
+ leaf-list object-unit {
+ type tx-antenna-object-unit;
+ description "The object units supported for this measurement object.";
+ }
+
+ leaf-list report-info {
+ type tx-antenna-report-info;
+ description "The reporting info supported for this measurement object.";
+ }
+
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in tx-antenna-stats-objects.";
+ }
+ }
+ }
+ }
+
+ grouping measurement-notification {
+
+ description
+ "notification may contain measurement result for transceiver-stats
+ and/or rx-window-stats and/or tx-stats and/or epe-stats";
+ list transceiver-stats {
+ key "measurement-object";
+
+ description
+ "measurement result of transceiver-measurement per 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;
+
+ list multiple-transceiver-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of transceiver-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use the
+
+ measurement-result-stats/transceiver-stats[measurement-object]/transceiver-measurement-result
+
+ schema-node to report a single transceiver measurement-object. The O-RU should report its latest
+ transceiver measurements available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses transceiver-measurement-result-grouping;
+ }
+
+ }
+
+ list rx-window-stats {
+ key "measurement-object";
+
+ description
+ "measurement result for the reception window measurement per
+ 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;
+
+ list multiple-rx-window-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of rx-window-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/rx-window-stats[measurement-object]/count or
+ measurement-result-stats/rx-window-stats[measurement-object]/tr-measured-result/count or
+ measurement-result-stats/rx-window-stats[measurement-object]/eaxc-measured-result/count
+
+ schema-nodes to report a single rx-window measurement-object. The O-RU should report its latest
+ rx-window measurement available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses rx-window-measurement-result-grouping;
+ }
+
+ }
+
+ list tx-stats {
+ key "measurement-object";
+
+ description
+ "measurement result for the tx stats measurement per
+ measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the tx stats measurement";
+ }
+ uses start-and-end-time;
+ uses tx-measurement-result-grouping;
+
+ list multiple-tx-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tx-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/tx-stats[measurement-object]/count or
+ measurement-result-stats/tx-stats[measurement-object]/tr-measured-result/count or
+ measurement-result-stats/tx-stats[measurement-object]/eaxc-measured-result/count
+
+ schema-nodes to report a single tx-measurement. The O-RU should report its latest
+ tx-measurement available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses tx-measurement-result-grouping;
+ }
+
+ }
+
+ list shared-cell-stats {
+ if-feature feat:SHARED-CELL-STATS;
+ key "measurement-object";
+
+ description
+ "measurement result for the shared-cell measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/shared-cell-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the shared-cell measurement";
+ }
+
+ list multiple-shared-cell-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of shared-cell-measurement.";
+
+ uses start-and-end-time;
+ uses shared-cell-measurement-result-grouping;
+
+ }
+ }
+
+ container epe-stats {
+ status deprecated;
+ description
+ "container for the EPE stats measurement - deprecated because measurement object
+ isn't included";
+
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+
+
+ }
+
+ list epe-statistics {
+ key "measurement-object";
+
+ description
+ "measurement result for the EPE stats measurement per
+ measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/epe-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the EPE stats measurement";
+ }
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+
+ list multiple-epe-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of epe-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall use the
+
+ measurement-result-stats/epe-statistics[measurement-object]/epe-measurement-resultv2/
+
+ schema-nodes to report a single epe-measurement for a measurement-object. The O-RU
+ should report its latest epe-measurement available. This ensures O-DUs supporting earlier
+ versions of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+ }
+
+ }
+
+ list symbol-rssi-stats {
+ key "measurement-object";
+
+ description
+ "measurement result of symbol-rssi-measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/symbol-rssi-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the symbol-rssi-measurement";
+ }
+
+ uses start-and-end-time;
+ uses symbol-rssi-measurement-result-grouping;
+
+ list multiple-symbol-rssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of symbol-rssi-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/symbol-rssi-stats[measurement-object]/
+
+ schema-nodes to report a single symbol-rssi measurement for a measurement-object.
+ The O-RU should report its latest symbol-rssi measurement available.";
+
+ uses start-and-end-time;
+ uses symbol-rssi-measurement-result-grouping;
+ }
+ }
+
+ list tssi-stats {
+ key "measurement-object";
+ description
+ "Measurement result of tssi per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tssi-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the tx-array-carriers";
+ }
+
+ list tssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tssi-measurement.
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+ uses start-and-end-time;
+ uses tssi-measurement-result-grouping;
+ }
+ }
+
+ list rssi-stats {
+ key "measurement-object";
+ description
+ "Measurement result of rssi per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rssi-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the rx-array-carrier";
+ }
+ list rssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of rssi-measurement.
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+ uses start-and-end-time;
+ uses rssi-measurement-result-grouping;
+ }
+ }
+
+ list tx-antenna-stats {
+ key "measurement-object";
+
+ description
+ "Measurement result of tx-antenna-measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-antenna-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the tx-antenna-measurement";
+ }
+
+ list tx-antenna-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tx-antenna-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+
+ uses start-and-end-time;
+ uses tx-antenna-measurement-result-grouping;
+ }
+
+ }
+
+ }
+
+ // Top level container
+
+ container performance-measurement-objects {
+ description
+ "configuration for performance management and measurement-result are
+ included";
+ uses measurement-group;
+ }
+
+// Notifications
+
+ notification measurement-result-stats {
+ description
+ "Notification may contain measurement results for transceiver-stats
+ and/or rx-window-stats";
+ uses measurement-notification;
+ }
+}
--- /dev/null
+module o-ran-processing-element {
+ yang-version 1.1;
+ namespace "urn:o-ran:processing-element:1.0";
+ prefix "o-ran-elements";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-ip {
+ prefix "ip";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.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 address + VLAN-ID based mapping
+ iii) UDP/IP based mapping
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introducing SHARED-ORU-MULTI-OPERATOR feature
+ 2) fixing constraints";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Add support for multiple transport-session-type per O-RU";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added new enum SHARED-CELL-ETH-INTERFACE in
+ transport-session-type and new containers north-eth-flow and
+ south-eth-flow to enable Shared cell scenario.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new leaf to enable O-RU to report the maximum number of
+ transport flows it can support, e.g., due to restrictions on number
+ of VLAN-IDs when Ethernet type transport is used.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature SHARED_CELL {
+ description
+ "Presence of feature indicates that this O-RU is capable to support
+ shared cell.";
+ }
+// groupings
+
+ grouping non-shared-cell-flow-group {
+ description "a grouping for non-shared cell O-RU flows";
+
+ container aliasmac-flow {
+ when "../../../transport-session-type = 'ALIASMAC-INTERFACE'";
+ if-feature o-ran-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]/o-ran-int:alias-macs";
+ }
+ mandatory true;
+ description
+ "O-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]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for alias MAC based flow";
+ }
+ leaf o-du-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "O-DU's MAC address used for alias MAC based flow";
+ }
+ }
+ container eth-flow {
+ when "../../../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]/o-ran-int:mac-address";
+ }
+ mandatory true;
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ mandatory true;
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf o-du-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "O-DU's MAC address used for Ethernet based flow";
+ }
+ }
+ container udpip-flow {
+ when "../../../transport-session-type = 'UDPIP-INTERFACE'";
+ 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 "O-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 "O-RU's IPv6 address";
+ }
+ mandatory true;
+ description "choice of O-RU IPv4 or IPv6 address";
+ }
+ leaf o-du-ip-address {
+ type inet:ip-address;
+ mandatory true;
+ description "O-DU's IP address";
+ }
+ leaf ru-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by O-RU";
+ }
+ leaf o-du-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by O-DU";
+ }
+ leaf ecpri-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
+ }
+ }
+ }
+
+ grouping shared-cell-flow-group {
+ description "a grouping for shared cell O-RU flows";
+
+ container north-eth-flow {
+ when "../../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE'";
+ if-feature "SHARED_CELL";
+ 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]/o-ran-int:mac-address";
+ }
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf north-node-mac-address {
+ type yang:mac-address;
+ description
+ "North-node's MAC address used for Ethernet based flow";
+ }
+ }
+ container south-eth-flow {
+ when "../../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE'";
+ if-feature "SHARED_CELL";
+ 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]/o-ran-int:mac-address";
+ }
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf south-node-mac-address {
+ type yang:mac-address;
+ description
+ "south-node's MAC address used for Ethernet based flow";
+ }
+ }
+ }
+
+ grouping session-and-markings-group {
+ description "a grouping with transport session type and enhanced uplane markings";
+
+ leaf transport-session-type {
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ enum SHARED-CELL-ETH-INTERFACE {
+ if-feature "SHARED_CELL";
+ description "VLAN based CUS Transport used for Shared Cell scenario";
+ }
+ }
+ default ETH-INTERFACE;
+ description
+ "the type of transport session used for identifying different processing
+ elements";
+ }
+ container enhanced-uplane-mapping {
+ presence "indicates that enhanced uplane mapping is used";
+ description "a mapping table for enhanced user plane marking";
+ list uplane-mapping {
+ key "up-marking-name";
+ description
+ "a mapping between up-link name and o-ran-interfaces:up-marking-name";
+ leaf up-marking-name {
+ type string;
+ description "a unique up marking name that is used for enhanced up marking";
+ }
+ choice up-markings {
+ description
+ "U-Plane markings";
+ case ethernet {
+ when "(../../transport-session-type = 'ALIASMAC-INTERFACE') or
+ (../../transport-session-type = 'ETH-INTERFACE') or
+ (../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE')";
+ leaf up-cos-name {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:class-of-service/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the Ethernet U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ case ipv4 {
+ when "(../../transport-session-type = 'UDPIP-INTERFACE')";
+ leaf upv4-dscp-name {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ type leafref {
+ path "/if:interfaces/if:interface/ip:ipv4/o-ran-int:diffserv-markings/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the IPv4 U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ case ipv6 {
+ when "(../../transport-session-type = 'UDPIP-INTERFACE')";
+ leaf upv6-dscp-name {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ type leafref {
+ path "/if:interfaces/if:interface/ip:ipv6/o-ran-int:diffserv-markings/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the IPv6 U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping pe-group {
+ description "a grouping of processing elements";
+ leaf maximum-number-of-transport-flows {
+ type uint16 {
+ range "1..4094";
+ }
+ default 4094;
+ config false;
+ description
+ "The maximum number of transport flows that can be supported by an O-RU";
+ }
+ uses session-and-markings-group;
+
+ 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 O-RU that identifies a processing
+ element instance.
+
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The identity of a shared resource operator. When present,
+ indicates that the list entry corresponds to a processing element
+ associated with a shared resource operator where the sro-id identifies
+ the specific shared resource operator";
+ }
+ 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 ";
+ }
+ uses non-shared-cell-flow-group;
+ uses shared-cell-flow-group;
+
+ }
+ }
+ list additional-transport-session-type-elements {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ key transport-session-type;
+
+ description
+ "Added to support multiple transport-session-type per O-RU,
+ it is always assumed that /processing-elements/ru-elements/ is configured with the first type of transport,
+ and /processing-element/additional-transport-session-elements/ru-elements/ is configured with the other types of transport.
+ If the O-RU is configured for shared-cell, this list will not be used. An O-RU shall reject any configuration
+ with a list entry with transport-session-type set to SHARED-CELL-ETH-INTERFACE";
+
+ uses session-and-markings-group;
+
+ 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 O-RU that identifies a processing
+ element instance.
+
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The identity of a shared resource operator. When present,
+ indicates that the list entry corresponds to a processing element
+ associated with a shared resource operator where the sro-id identifies
+ the specific shared resource operator";
+ }
+ 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 ";
+ }
+ uses non-shared-cell-flow-group;
+ }
+ }
+ }
+ }
+
+// top-level container
+
+ container processing-elements {
+ description
+ "a model defining the mapping between transport flows and arbitrary
+ O-RAN 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";
+ uses pe-group;
+ }
+}
--- /dev/null
+module o-ran-qos{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:qos:1.0";\r
+ prefix "o-ran-du-qos";\r
+ \r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+ \r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+ \r
+ import o-ran-hardware {\r
+ prefix o-ran-hw;\r
+ // TODO AS removed revision\r
+ // revision-date "2020-04-17";\r
+ }\r
+ \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module defines the YANG definitions for QoS configuration for O-DU. \r
+ This is used to augment SA5 DU data model.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ grouping qos-config-group {\r
+ list qos-config-group {\r
+ key "qci";\r
+ min-elements 1;\r
+ leaf qci {\r
+ type uint8 {\r
+ range "0..255";\r
+ }\r
+ mandatory true;\r
+ description "QoS Class Identifier defined in TS 23.401";\r
+ }\r
+ leaf qos-group-index {\r
+ type uint8 {\r
+ range "1..32";\r
+ }\r
+ mandatory true;\r
+ description "QoS group index for the QCI";\r
+ }\r
+ description "List of QoS group index to QCI mapping";\r
+ } \r
+ description "grouping for QoS configuration";\r
+ }\r
+ \r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/gnbdu3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ uses qos-config-group; \r
+ description "SA5 gNB DU function augmented with QoS configuration";\r
+ }\r
+}\r
--- /dev/null
+module o-ran-rlc{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:rlc:1.0";\r
+ prefix "o-ran-rlc";\r
+ \r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+ \r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+ \r
+ import o-ran-hardware {\r
+ prefix o-ran-hw;\r
+ // TODO AS removed revision\r
+ // revision-date "2020-04-17";\r
+ }\r
+ \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module defines the YANG definitions for O-DU RLC module\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ typedef poll-retransmit-time {\r
+ type enumeration {\r
+ enum MS5 {\r
+ description "5 milliseconds";\r
+ }\r
+ enum MS10 {\r
+ description "10 milliseconds";\r
+ }\r
+ enum MS15 {\r
+ description "15 milliseconds";\r
+ }\r
+ enum MS20 {\r
+ description "20 milliseconds";\r
+ }\r
+ enum MS25 {\r
+ description "25 milliseconds";\r
+ }\r
+ enum MS30 {\r
+ description "30 milliseconds";\r
+ }\r
+ enum MS35 {\r
+ description "35 milliseconds";\r
+ }\r
+ enum MS40 {\r
+ description "40 milliseconds";\r
+ }\r
+ enum MS45 {\r
+ description "45 milliseconds";\r
+ }\r
+ enum MS50 {\r
+ description "50 milliseconds";\r
+ }\r
+ enum MS55 {\r
+ description "55 milliseconds";\r
+ }\r
+ enum MS60 {\r
+ description "60 milliseconds";\r
+ }\r
+ enum MS65 {\r
+ description "65 milliseconds";\r
+ }\r
+ enum MS70 {\r
+ description "70 milliseconds";\r
+ }\r
+ enum MS75 {\r
+ description "75 milliseconds";\r
+ }\r
+ enum MS80 {\r
+ description "80 milliseconds";\r
+ }\r
+ enum MS85 {\r
+ description "85 milliseconds";\r
+ }\r
+ enum MS90 {\r
+ description "90 milliseconds";\r
+ }\r
+ enum MS95 {\r
+ description "95 milliseconds";\r
+ }\r
+ enum MS100 {\r
+ description "100 milliseconds";\r
+ }\r
+ enum MS105 {\r
+ description "105 milliseconds";\r
+ }\r
+ enum MS110 {\r
+ description "110 milliseconds";\r
+ }\r
+ enum MS115 {\r
+ description "115 milliseconds";\r
+ }\r
+ enum MS120 {\r
+ description "120 milliseconds";\r
+ }\r
+ enum MS125 {\r
+ description "125 milliseconds";\r
+ }\r
+ enum MS130 {\r
+ description "130 milliseconds";\r
+ }\r
+ enum MS135 {\r
+ description "135 milliseconds";\r
+ }\r
+ enum MS140 {\r
+ description "140 milliseconds";\r
+ }\r
+ enum MS145 {\r
+ description "145 milliseconds";\r
+ }\r
+ enum MS150 {\r
+ description "150 milliseconds";\r
+ }\r
+ enum MS155 {\r
+ description "155 milliseconds";\r
+ }\r
+ enum MS160 {\r
+ description "160 milliseconds";\r
+ }\r
+ enum MS165 {\r
+ description "165 milliseconds";\r
+ }\r
+ enum MS170 {\r
+ description "170 milliseconds";\r
+ }\r
+ enum MS175 {\r
+ description "175 milliseconds";\r
+ }\r
+ enum MS180 {\r
+ description "180 milliseconds";\r
+ }\r
+ enum MS185 {\r
+ description "185 milliseconds";\r
+ }\r
+ enum MS190 {\r
+ description "190 milliseconds";\r
+ }\r
+ enum MS195 {\r
+ description "195 milliseconds";\r
+ }\r
+ enum MS200 {\r
+ description "200 milliseconds";\r
+ }\r
+ enum MS205 {\r
+ description "205 milliseconds";\r
+ }\r
+ enum MS210 {\r
+ description "210 milliseconds";\r
+ }\r
+ enum MS215 {\r
+ description "215 milliseconds";\r
+ }\r
+ enum MS220 {\r
+ description "220 milliseconds";\r
+ }\r
+ enum MS225 {\r
+ description "225 milliseconds";\r
+ }\r
+ enum MS230 {\r
+ description "230 milliseconds";\r
+ }\r
+ enum MS235 {\r
+ description "235 milliseconds";\r
+ }\r
+ enum MS240 {\r
+ description "240 milliseconds";\r
+ }\r
+ enum MS245 {\r
+ description "245 milliseconds";\r
+ }\r
+ enum MS250 {\r
+ description "250 milliseconds";\r
+ }\r
+ enum MS300 {\r
+ description "300 milliseconds";\r
+ }\r
+ enum MS350 {\r
+ description "350 milliseconds";\r
+ }\r
+ enum MS400 {\r
+ description "400 milliseconds";\r
+ }\r
+ enum MS450 {\r
+ description "450 milliseconds";\r
+ }\r
+ enum MS500 {\r
+ description "500 milliseconds";\r
+ }\r
+ enum MS800 {\r
+ description "800 milliseconds";\r
+ }\r
+ enum MS1000 {\r
+ description "1000 milliseconds";\r
+ }\r
+ enum MS2000 {\r
+ description "2000 milliseconds";\r
+ }\r
+ enum MS4000 {\r
+ description "4000 milliseconds";\r
+ }\r
+ }\r
+ description "type definition for RLC poll-retransmit-timer";\r
+ } \r
+\r
+ typedef status-prohibit-time {\r
+ type enumeration {\r
+ enum MS0 {\r
+ description "0 milliseconds";\r
+ }\r
+ enum MS5 {\r
+ description "5 milliseconds";\r
+ }\r
+ enum MS10 {\r
+ description "10 milliseconds";\r
+ }\r
+ enum MS15 {\r
+ description "15 milliseconds";\r
+ }\r
+ enum MS20 {\r
+ description "20 milliseconds";\r
+ }\r
+ enum MS25 {\r
+ description "25 milliseconds";\r
+ }\r
+ enum MS30 {\r
+ description "30 milliseconds";\r
+ }\r
+ enum MS35 {\r
+ description "35 milliseconds";\r
+ }\r
+ enum MS40 {\r
+ description "40 milliseconds";\r
+ }\r
+ enum MS45 {\r
+ description "45 milliseconds";\r
+ }\r
+ enum MS50 {\r
+ description "50 milliseconds";\r
+ }\r
+ enum MS55 {\r
+ description "55 milliseconds";\r
+ }\r
+ enum MS60 {\r
+ description "60 milliseconds";\r
+ }\r
+ enum MS65 {\r
+ description "65 milliseconds";\r
+ }\r
+ enum MS70 {\r
+ description "70 milliseconds";\r
+ }\r
+ enum MS75 {\r
+ description "75 milliseconds";\r
+ }\r
+ enum MS80 {\r
+ description "80 milliseconds";\r
+ }\r
+ enum MS85 {\r
+ description "85 milliseconds";\r
+ }\r
+ enum MS90 {\r
+ description "90 milliseconds";\r
+ }\r
+ enum MS95 {\r
+ description "95 milliseconds";\r
+ }\r
+ enum MS100 {\r
+ description "100 milliseconds";\r
+ }\r
+ enum MS105 {\r
+ description "105 milliseconds";\r
+ }\r
+ enum MS110 {\r
+ description "110 milliseconds";\r
+ }\r
+ enum MS115 {\r
+ description "115 milliseconds";\r
+ }\r
+ enum MS120 {\r
+ description "120 milliseconds";\r
+ }\r
+ enum MS125 {\r
+ description "125 milliseconds";\r
+ }\r
+ enum MS130 {\r
+ description "130 milliseconds";\r
+ }\r
+ enum MS135 {\r
+ description "135 milliseconds";\r
+ }\r
+ enum MS140 {\r
+ description "140 milliseconds";\r
+ }\r
+ enum MS145 {\r
+ description "145 milliseconds";\r
+ }\r
+ enum MS150 {\r
+ description "150 milliseconds";\r
+ }\r
+ enum MS155 {\r
+ description "155 milliseconds";\r
+ }\r
+ enum MS160 {\r
+ description "160 milliseconds";\r
+ }\r
+ enum MS165 {\r
+ description "165 milliseconds";\r
+ }\r
+ enum MS170 {\r
+ description "170 milliseconds";\r
+ }\r
+ enum MS175 {\r
+ description "175 milliseconds";\r
+ }\r
+ enum MS180 {\r
+ description "180 milliseconds";\r
+ }\r
+ enum MS185 {\r
+ description "185 milliseconds";\r
+ }\r
+ enum MS190 {\r
+ description "190 milliseconds";\r
+ }\r
+ enum MS195 {\r
+ description "195 milliseconds";\r
+ }\r
+ enum MS200 {\r
+ description "200 milliseconds";\r
+ }\r
+ enum MS205 {\r
+ description "205 milliseconds";\r
+ }\r
+ enum MS210 {\r
+ description "210 milliseconds";\r
+ }\r
+ enum MS215 {\r
+ description "215 milliseconds";\r
+ }\r
+ enum MS220 {\r
+ description "220 milliseconds";\r
+ }\r
+ enum MS225 {\r
+ description "225 milliseconds";\r
+ }\r
+ enum MS230 {\r
+ description "230 milliseconds";\r
+ }\r
+ enum MS235 {\r
+ description "235 milliseconds";\r
+ }\r
+ enum MS240 {\r
+ description "240 milliseconds";\r
+ }\r
+ enum MS245 {\r
+ description "245 milliseconds";\r
+ }\r
+ enum MS250 {\r
+ description "250 milliseconds";\r
+ }\r
+ enum MS300 {\r
+ description "300 milliseconds";\r
+ }\r
+ enum MS350 {\r
+ description "350 milliseconds";\r
+ }\r
+ enum MS400 {\r
+ description "400 milliseconds";\r
+ }\r
+ enum MS450 {\r
+ description "450 milliseconds";\r
+ }\r
+ enum MS500 {\r
+ description "500 milliseconds";\r
+ }\r
+ enum MS800 {\r
+ description "800 milliseconds";\r
+ }\r
+ enum MS1000 {\r
+ description "1000 milliseconds";\r
+ }\r
+ enum MS1200 {\r
+ description "1200 milliseconds";\r
+ }\r
+ enum MS1600 {\r
+ description "1600 milliseconds";\r
+ }\r
+ enum MS2000 {\r
+ description "2000 milliseconds";\r
+ }\r
+ enum MS2400 {\r
+ description "2400 milliseconds";\r
+ }\r
+ }\r
+ description "type definition for RLC status-prohibit-timer";\r
+ }\r
+ \r
+ typedef reassembly-time {\r
+ type enumeration {\r
+ enum MS0 {\r
+ description "0 milliseconds";\r
+ }\r
+ enum MS5 {\r
+ description "5 milliseconds";\r
+ }\r
+ enum MS10 {\r
+ description "10 milliseconds";\r
+ }\r
+ enum MS15 {\r
+ description "15 milliseconds";\r
+ }\r
+ enum MS20 {\r
+ description "20 milliseconds";\r
+ }\r
+ enum MS25 {\r
+ description "25 milliseconds";\r
+ }\r
+ enum MS30 {\r
+ description "30 milliseconds";\r
+ }\r
+ enum MS35 {\r
+ description "35 milliseconds";\r
+ }\r
+ enum MS40 {\r
+ description "40 milliseconds";\r
+ }\r
+ enum MS45 {\r
+ description "45 milliseconds";\r
+ }\r
+ enum MS50 {\r
+ description "50 milliseconds";\r
+ }\r
+ enum MS55 {\r
+ description "55 milliseconds";\r
+ }\r
+ enum MS60 {\r
+ description "60 milliseconds";\r
+ }\r
+ enum MS65 {\r
+ description "65 milliseconds";\r
+ }\r
+ enum MS70 {\r
+ description "70 milliseconds";\r
+ }\r
+ enum MS75 {\r
+ description "75 milliseconds";\r
+ }\r
+ enum MS80 {\r
+ description "80 milliseconds";\r
+ }\r
+ enum MS85 {\r
+ description "85 milliseconds";\r
+ }\r
+ enum MS90 {\r
+ description "90 milliseconds";\r
+ }\r
+ enum MS95 {\r
+ description "95 milliseconds";\r
+ }\r
+ enum MS100 {\r
+ description "100 milliseconds";\r
+ }\r
+ enum MS110 {\r
+ description "110 milliseconds";\r
+ }\r
+ enum MS120 {\r
+ description "120 milliseconds";\r
+ }\r
+ enum MS130 {\r
+ description "130 milliseconds";\r
+ }\r
+ enum MS140 {\r
+ description "140 milliseconds";\r
+ }\r
+ enum MS150 {\r
+ description "150 milliseconds";\r
+ }\r
+ enum MS160 {\r
+ description "160 milliseconds";\r
+ }\r
+ enum MS170 {\r
+ description "170 milliseconds";\r
+ }\r
+ enum MS180 {\r
+ description "180 milliseconds";\r
+ }\r
+ enum MS190 {\r
+ description "190 milliseconds";\r
+ }\r
+ enum MS200 {\r
+ description "200 milliseconds";\r
+ }\r
+ }\r
+ description "type definition for RLC reassembly-timer";\r
+ }\r
+ \r
+ typedef num-poll-pdu {\r
+ type enumeration {\r
+ enum P4 {\r
+ description "PDU";\r
+ }\r
+ enum P8 {\r
+ description "8 PDU";\r
+ }\r
+ enum P16 {\r
+ description "16 PDU";\r
+ }\r
+ enum P32 {\r
+ description "32 PDU";\r
+ }\r
+ enum P64 {\r
+ description "64 PDU";\r
+ }\r
+ enum P128 {\r
+ description "128 PDU";\r
+ }\r
+ enum P256 {\r
+ description "256 PDU";\r
+ }\r
+ enum P512 {\r
+ description "512 PDU";\r
+ }\r
+ enum P1024 {\r
+ description "1024 PDU";\r
+ }\r
+ enum P2048 {\r
+ description "2048 PDU";\r
+ }\r
+ enum P4096 {\r
+ description "4096 PDU";\r
+ }\r
+ enum P6144 {\r
+ description "6144 PDU";\r
+ }\r
+ enum P8192 {\r
+ description "8192 PDU";\r
+ }\r
+ enum P12288 {\r
+ description "12288 PDU";\r
+ }\r
+ enum P16384 {\r
+ description "16384 PDU";\r
+ }\r
+ enum P20480 {\r
+ description "20480 PDU";\r
+ }\r
+ enum P24576 {\r
+ description "24576 PDU";\r
+ }\r
+ enum P28672 {\r
+ description "28672 PDU";\r
+ }\r
+ enum P32768 {\r
+ description "32768 PDU";\r
+ }\r
+ enum P40960 {\r
+ description "40960 PDU";\r
+ }\r
+ enum P49152 {\r
+ description "49152 PDU";\r
+ }\r
+ enum P57344 {\r
+ description "57344 PDU";\r
+ }\r
+ enum P65536 {\r
+ description "65536 PDU";\r
+ }\r
+ enum INFINITY {\r
+ description "infinity";\r
+ }\r
+ }\r
+ description "type definition for RLC poll-pdu";\r
+ }\r
+ typedef num-poll-bytes {\r
+ type enumeration {\r
+ enum KB1 {\r
+ description "1 kByte";\r
+ }\r
+ enum KB2 {\r
+ description "2 kBytes";\r
+ }\r
+ enum KB5 {\r
+ description "5 kBytes";\r
+ }\r
+ enum KB8 {\r
+ description "8 kBytes";\r
+ }\r
+ enum KB10 {\r
+ description "10 kBytes";\r
+ }\r
+ enum KB15 {\r
+ description "15 kBytes";\r
+ }\r
+ enum KB25 {\r
+ description "25 kBytes";\r
+ }\r
+ enum KB50 {\r
+ description "50 kBytes";\r
+ }\r
+ enum KB75 {\r
+ description "75 kBytes";\r
+ }\r
+ enum KB100 {\r
+ description "100 kBytes";\r
+ }\r
+ enum KB125 {\r
+ description "125 kBytes";\r
+ }\r
+ enum KB250 {\r
+ description "250 kBytes";\r
+ }\r
+ enum KB375 {\r
+ description "375 kBytes";\r
+ }\r
+ enum KB500 {\r
+ description "500 kBytes";\r
+ }\r
+ enum KB750 {\r
+ description "750 kBytes";\r
+ }\r
+ enum KB1000 {\r
+ description "1000 kBytes";\r
+ }\r
+ enum KB1250 {\r
+ description "1250 kBytes";\r
+ }\r
+ enum KB1500 {\r
+ description "1500 kBytes";\r
+ }\r
+ enum KB2000 {\r
+ description "2000 kBytes";\r
+ }\r
+ enum KB3000 {\r
+ description "3000 kBytes";\r
+ }\r
+ enum KB4000 {\r
+ description "4000 kBytes";\r
+ }\r
+ enum KB4500 {\r
+ description "4500 kBytes";\r
+ }\r
+ enum KB5000 {\r
+ description "5000 kBytes";\r
+ }\r
+ enum KB5500 {\r
+ description "5500 kBytes";\r
+ }\r
+ enum KB6000 {\r
+ description "6000 kBytes";\r
+ }\r
+ enum KB6500 {\r
+ description "6500 kBytes";\r
+ }\r
+ enum KB7000 {\r
+ description "7000 kBytes";\r
+ }\r
+ enum KB7500 {\r
+ description "7500 kBytes";\r
+ }\r
+ enum MB8 {\r
+ description "8 mBytes";\r
+ }\r
+ enum MB9 {\r
+ description "9 mBytes";\r
+ }\r
+ enum MB10 {\r
+ description "10 mBytes";\r
+ }\r
+ enum MB11 {\r
+ description "11 mBytes";\r
+ }\r
+ enum MB12 {\r
+ description "12 mBytes";\r
+ }\r
+ enum MB13 {\r
+ description "13 mBytes";\r
+ }\r
+ enum MB14 {\r
+ description "14 mBytes";\r
+ }\r
+ enum MB15 {\r
+ description "15 mBytes";\r
+ }\r
+ enum MB16 {\r
+ description "16 mBytes";\r
+ }\r
+ enum MB17 {\r
+ description "17 mBytes";\r
+ }\r
+ enum MB18 {\r
+ description "18 mBytes";\r
+ }\r
+ enum MB20 {\r
+ description "20 mBytes";\r
+ }\r
+ enum MB25 {\r
+ description "25 mBytes";\r
+ }\r
+ enum MB30 {\r
+ description "30 mBytes";\r
+ }\r
+ enum MB40 {\r
+ description "40 mBytes";\r
+ }\r
+ enum INFINITY {\r
+ description "infinity";\r
+ }\r
+ }\r
+ description "type definition for RLC poll-bytes";\r
+ }\r
+ \r
+ typedef num-max-retx {\r
+ type enumeration {\r
+ enum T1 {\r
+ description "1 retransmission";\r
+ }\r
+ enum T2 {\r
+ description "2 retransmissions";\r
+ }\r
+ enum T3 {\r
+ description "3 retransmissions";\r
+ }\r
+ enum T4 {\r
+ description "4 retransmissions";\r
+ }\r
+ enum T6 {\r
+ description "6 retransmissions";\r
+ }\r
+ enum T8 {\r
+ description "8 retransmissions";\r
+ }\r
+ enum T16 {\r
+ description "16 retransmissions";\r
+ }\r
+ enum T32 {\r
+ description "32 retransmissions";\r
+ }\r
+ }\r
+ description "type definition for RLC max-retx";\r
+ }\r
+ \r
+ typedef am-sn-field-lengths {\r
+ type enumeration {\r
+ enum SIZE12 {\r
+ description "12-bit SN field";\r
+ }\r
+ enum SIZE18 {\r
+ description "18-bit SN field";\r
+ }\r
+ }\r
+ description "type definition for sn-field-length-am";\r
+ }\r
+ typedef um-sn-field-lengths {\r
+ type enumeration {\r
+ enum SIZE6 {\r
+ description "6-bit SN field";\r
+ }\r
+ enum SIZE12 {\r
+ description "12-bit SN field";\r
+ }\r
+ }\r
+ description "type definition for sn-field-length-um";\r
+ }\r
+ \r
+ \r
+ grouping rlc-config-param-grouping {\r
+ description "grouping of RLC config parameters";\r
+ leaf t-poll-retransmit {\r
+ type poll-retransmit-time;\r
+ mandatory true;\r
+ description "poll retransmit timer for RLC-AM. TS 38.331";\r
+ }\r
+ leaf poll-pdu {\r
+ type num-poll-pdu;\r
+ mandatory true;\r
+ description "num poll pdu for RLC-AM. TS 38.331";\r
+ }\r
+ leaf poll-byte {\r
+ type num-poll-bytes;\r
+ mandatory true;\r
+ description "num poll bytes for RLC-AM. TS 38.331";\r
+ }\r
+ leaf max-retx-threshold {\r
+ type num-max-retx;\r
+ mandatory true;\r
+ description "num max retx for RLC-AM. TS 38.331";\r
+ }\r
+ leaf t-reassembly {\r
+ type reassembly-time;\r
+ mandatory true;\r
+ description "reassembly timer for RLC-AM. TS 38.331";\r
+ }\r
+ leaf t-status-prohibit {\r
+ type status-prohibit-time;\r
+ mandatory true;\r
+ description "status-prohibit timer for RLC-AM. TS 38.331";\r
+ }\r
+ }\r
+\r
+ grouping sn-field-length-grouping {\r
+ description "grouping of AM and UM SN field length parameters";\r
+ leaf sn-field-length-am {\r
+ type am-sn-field-lengths;\r
+ mandatory true;\r
+ description "sn field length for AM";\r
+ }\r
+ leaf sn-field-length-um {\r
+ type um-sn-field-lengths;\r
+ mandatory true;\r
+ description "sn field length for UM";\r
+ }\r
+ }\r
+ \r
+ grouping ue-config-rlc-param-grouping {\r
+ description "grouping of UE RLC config parameters";\r
+ container ue-config-rlc-param-list {\r
+ description "container for UE RLC config parameters";\r
+ uses rlc-config-param-grouping;\r
+ }\r
+ }\r
+ grouping gnb-du-config-rlc-param-grouping {\r
+ description "grouping of DU RLC config parameters";\r
+ container gnb-du-config-rlc-param-list {\r
+ description "container for DU RLC config parameters";\r
+ uses rlc-config-param-grouping;\r
+ }\r
+ }\r
+ \r
+ grouping rlc-config-group {\r
+ description "grouping of RLC config parameters";\r
+ container rlc-config {\r
+ description "Container for RLC config parameters";\r
+ container srb-config-list {\r
+ description "container for SRB RLC config parameters";\r
+ uses ue-config-rlc-param-grouping;\r
+ uses gnb-du-config-rlc-param-grouping;\r
+ }\r
+ list qos-group-config-list {\r
+ key "qos-group-index";\r
+ min-elements 1;\r
+ description "list of RLC config per QoS group"; \r
+ leaf qos-group-index {\r
+ type uint8 {\r
+ range "1..32";\r
+ }\r
+ description "qos group index";\r
+ }\r
+ container common-config-rlc-param-list {\r
+ description "container for RLC config parameters common for DU and UE";\r
+ container ul-sn-field-lengths {\r
+ description "container for UL SN field lengths";\r
+ uses sn-field-length-grouping;\r
+ }\r
+ container dl-sn-field-lengths {\r
+ description "container for DL SN field lengths";\r
+ uses sn-field-length-grouping;\r
+ }\r
+ }\r
+ uses ue-config-rlc-param-grouping;\r
+ uses gnb-du-config-rlc-param-grouping; \r
+ }\r
+ }\r
+ }\r
+ \r
+ augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/gnbdu3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ uses rlc-config-group;\r
+ description "SA5 gNB DU function augmented with RLC configuration";\r
+ }\r
+} \r
+ \r
+ \r
+ \r
+ \r
+ \r
+ \r
+ \r
+
\ No newline at end of file
--- /dev/null
+module o-ran-shared-cell {
+ yang-version 1.1;
+ namespace "urn:o-ran:shared-cell:1.0";
+ prefix "o-ran-sc";
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+ import o-ran-processing-element {
+ prefix "o-ran-pe";
+ }
+
+ import o-ran-common-yang-types {
+ prefix "o-ran-cmn";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for shared cell capable O-RU (Cascade and FHM).
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add copy combine capacity per port.
+ 2) fix of missed radio timing correction.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) ability to support copy combine delay per SCS";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) supported SCSes are added as the capability
+ 2) deprecate downlink-radio-frame-offset in copy entity";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) eaxc-id-group support in shared cell";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added SHARED-ORU-MULTI-OPERATOR anf SHARED-ORU-MULTI-ODU features";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add support for multi-cell in cascade mode.
+ 3) add SCS info and mapping with eaxc-id into Combine-entity.
+ 4) add enhanced-t-combine feature Add T_combine-net (capability)
+ 5) add Tx-duration, enhanced-t-combine-enabled";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added selective combining using beamId.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) initial version for shared cell O-RU related yang module.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ feature FHM {
+ description
+ "Presence of feature indicates that O-RU acts as FHM and doesn't have
+ the capability of radio transmission and reception. Absence of feature
+ indicates that O-RU does not act as FHM and supports radio transmission
+ and reception function.";
+ }
+
+ feature SELECTIVE-BEAM-ID {
+ description
+ "Presence of feature indicates that FHM supports the selective combining
+ function by using beamId";
+ }
+
+ // radio offsets
+ grouping radio-offset {
+ description
+ "shared cell FHM mode needs the configuration for radio related offset";
+ 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: Unit is 1/1.2288e9 sec.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ mandatory true;
+
+ description
+ "This parameter is used for offsetting SFN value.
+ Unit is 10ms.";
+ }
+ }
+
+ // shared cell capability
+ grouping shared-cell-module-capability{
+ description
+ "shared cell related module capability of O-RU";
+ container shared-cell-module-cap {
+ config false;
+ description
+ "indicates shared cell specific module capability";
+
+ leaf t-copy {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between receiving an IQ sample over the fronthaul interface from
+ the north-node, coping it and transmitting it over the fronthaul
+ interface to the south-node.";
+ }
+
+ leaf t-combine {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between receiving an IQ sample over the fronthaul interface from
+ the south-node(s), combing them and transmitting it over the
+ fronthaul interface to the north-node.
+
+ When enhanced-t-combine-enabled is 'true' by O-DU, FHM/Cascade O-RU supporting
+ ENHANCED-T-COMBINE uses t-combine-net and tx-duration instead of this value.";
+ }
+
+ leaf t-combine-net {
+ type uint32;
+ units nanoseconds;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between starting time to combine IQ data from received message(s)
+ and starting time to transmit them with a message over the fronthaul
+ interface to O-DU or the north-node.";
+ }
+
+ leaf-list scs-supported {
+ if-feature FHM;
+ type o-ran-cmn:scs-config-type;
+ description
+ "List of supported scs by FHM";
+ }
+
+ list combine-delay-per-scs {
+ key "scs";
+ description
+ "This is a list of combine delay according to SCS.";
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages.";
+ }
+
+ leaf t-combine-net {
+ type uint32;
+ units nanoseconds;
+ description
+ "t-combine-net value corresponding to SCS.";
+ }
+
+ leaf t-combine {
+ type uint32;
+ units nanoseconds;
+ description
+ "t-combine value corresponding to SCS.";
+ }
+ }
+
+ leaf ta3-prime-max-upper-range {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "The upper limit for the configurable ta3-prime-max value.
+ This is the capability information of O-RU that comes from
+ the O-RU internal memory for the combine operation.";
+ }
+
+ leaf max-number-node-copy-and-combine {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of south-node for the copy-and-combine
+ functions of cascade O-RU or FHM.
+ For cascade mode, this value is one. It means
+ O-RU copies the stream of eCPRI messages only once for the connected
+ south-node and copied stream are forwarded to the south-node.
+ Similarly, the cascade O-RU combines once for the streams of
+ eCPRI messages received from the south node and the streams of radio
+ reception function.
+ For FHM mode, FHM is able to copy the stream of eCPRI messages
+ according to this parameter and forward each copied stream
+ to each south-node. FHM is able to combine the streams of eCPRI
+ messages received from the multiple south-nodes corresponding to
+ this parameter at most.";
+ }
+
+ leaf max-number-eaxcid-copy {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of eaxc-ids for the copy functions
+ of cascade O-RU or FHM.
+ For Cascade O-RU, it is same number of static-low-level-tx-endpoints plus
+ static-low-level-rx-endpoints, for which low-level-tx(rx)-endpoints
+ are configured with eaxc-id in u-plane configuration.
+ For FHM, it is max configurable number of eaxc-ids in
+ tx-eaxc-id and rx-eaxc-id in shared-cell-copy-uplane-config.";
+ }
+
+ leaf max-number-eaxcid-combine {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of eaxc-ids for the combine functions
+ of cascade O-RU or FHM.
+ For Cascade O-RU, it is same number of static-low-level-rx-endpoints,
+ for which low-level-rx-endpoints are configured with eaxc-id in
+ u-plane configuration.
+ For FHM, it is max configurable number of eaxc-ids in rx-eaxc-id
+ in shared-cell-combine-uplane-config across all combine-enities.
+
+ When multiple scs or multiple c-plane section types with a single eaxc-id
+ are used for FHM supporting MULTIPLE-SCS-IN-EAXC, all eaxc-id instances
+ across scs, C-Plane section types and combine entities are counted even
+ though they are same eaxc-id. The counted number shall not excced this value.";
+ }
+
+ list copy-combine-capacity-per-port {
+ key "port-number";
+ description
+ "Presence of this list indicates that FHM has a different capacity per port in south bound.
+ This is a list of copy-combine-capacity per port-number for copy and combining function.
+ Absence of this list indicates all ports has the universal capacity described by other RO parameters.";
+
+ leaf port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "port number assigned to interface and its physical port.";
+ }
+
+ leaf copy-combine-capacity-type-id {
+ type leafref {
+ path "../../copy-combine-capacity-type/id";
+ }
+ description
+ "copy-combine-capacity-type assigned to port-number.";
+ }
+ }
+
+ list copy-combine-capacity-type {
+ key "id";
+ description
+ "Properties of copy-combine-capacity for copy and combine functions.";
+
+ leaf id {
+ type uint8;
+ description
+ "Identifies type of copy-combine-capacity.";
+ }
+
+ leaf max-num-of-nodes-combine-in-port {
+ type uint8 {
+ range "1..max";
+ }
+ description
+ "This parameter indicates how many south-nodes connected to a single port can be supported
+ at maximum for combine functions regardless of whether eaxc-ids are same or not.";
+ }
+
+ leaf max-num-of-eaxc-id-combine-in-port {
+ type uint16 {
+ range "1..max";
+ }
+ description
+ "This parameter indicates how many eaxc-ids for combine functions can be supported in a port at maximum.
+ Multiple eAxC flows with the same eaxc-id are counted as the corresponding plural value.
+ E.g. 8 eAxC flows with eAxC-id=0 are counted as 8.";
+ }
+ }
+
+ container eaxc-id-group-capabilities {
+ if-feature FHM;
+ description
+ "Presence of this container indicates that FHM can refer to C-Plane in UL direction
+ to support combining U-Plane messages commanded by C-Plane with Section Extension 10.";
+ leaf max-num-rx-eaxc-id-groups {
+ type uint8;
+ description
+ "Maximum number of configurable rx-eaxc-id-group supported by FHM.";
+ }
+
+ leaf max-num-rx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of member-rx-eaxc-id in single rx-eaxc-id-group supported by FHM.";
+ }
+ }
+
+ list compression-method-supported {
+ if-feature FHM;
+ description
+ "List of supported compression methods for FHM";
+ uses cf:compression-details;
+ }
+
+ leaf multi-cell-in-cascade-mode-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports multi cell
+ operation in shared cell cascade mode.
+ If multi-cell-in-cascade-mode-supported = false then each shared cell
+ O-RU in a physical cascaded chain can only be used for operating
+ carriers that correspond to a single cell.
+ If multi-cell-in-cascade-mode-supported = true, it means that the O-RU
+ may be configured such that the shared-cell carriers can be used to
+ support mutiple different cells, where each cell is served by its own
+ separate cascade chain. See CUS-Plane Specification for more details.";
+ }
+ }
+ }
+
+ // shared cell mode configuration
+ grouping shared-cell-mode{
+ description
+ "A grouping defining the schema nodes for shared cell configuration";
+ choice shared-cell-copy-combine-mode {
+ case COMMON {
+ description
+ "all eCPRI payload are the target for copy and combine functions.
+ Common set of eaxc-ids are used in O-RU in the shared cell network.
+ For cascade mode, eaxc-ids of low-level-tx(rx)-links in
+ o-ran-uplane-configuration that has relation to the
+ processing-element are used.
+ For FHM mode, eaxc-ids of shared-cell-copy-uplane-config and
+ those of shared-cell-combine-config are used.";
+
+ uses shared-cell-copy-configuration;
+ uses shared-cell-combine-configuration;
+ }
+ case SELECTIVE-BEAM-ID {
+ if-feature "FHM and SELECTIVE-BEAM-ID";
+ description
+ "Case that FHM has selective transmission and reception function
+ by using beamId";
+
+ uses shared-cell-copy-configuration-for-selective-beam-id;
+ uses shared-cell-combine-configuration-for-selective-beam-id;
+ }
+ case SELECTIVE {
+ description "for future use";
+ }
+ description
+ "configuration mode can be selected.";
+ }
+ }
+
+ // processing elements set
+ grouping processing-element-set{
+ description
+ "shared-cell-copy/combine-configuration refers the pair of processing
+ element set of a north-node and a south-node.";
+
+ leaf north-node-processing-element{
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "north-node processing element indicates the set of
+ 'north-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ north-eth-flow is selected for the transport flow.";
+ }
+
+ leaf-list south-node-processing-elements{
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+ } // processing-element-set
+
+ // processing elements set for SELECTIVE-BEAM-ID
+ grouping processing-element-set-for-selective-beam-id {
+ description
+ "shared-cell-copy/combine-configuration refers the pair of processing
+ element set of a north-node and a south-node.";
+
+ leaf north-node-processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "north-node processing element indicates the set of
+ 'north-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ north-eth-flow is selected for the transport flow.";
+ }
+
+ leaf-list south-node-processing-elements {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+
+ list mapping-table-for-selective-beam-id {
+ key "global-beam-id south-node-processing-elements";
+ description "the mapping information between global-beam-id and local-beam-id";
+
+ leaf global-beam-id {
+ type uint16;
+ description
+ "This parameter indicates the beam ID to be applied to the U-Plane data
+ on O-DU as same as existing beamId. One global beamId can be mapped
+ to one or multiple local beamId.
+ The mapping information between each global beamId, O-RU(s),
+ and local beamId is configured to the FHM during M-Plane start-up procedure.";
+ }
+
+ leaf south-node-processing-elements {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+
+ leaf local-beam-id {
+ type uint16;
+ description
+ "This parameter indicates the beam ID to be applied to
+ the U-Plane data on O-RU as same as existing beamId.
+ In one O-RU, different beams can not map to one global beamId.
+ Local beamId shall be unique within O-RU.";
+ }
+ }
+ } // processing-element-set for SELECTIVE-BEAM-ID
+
+ // shared cell copy and combine config
+ grouping shared-cell-copy-configuration {
+ description
+ "shared-cell-copy-configuration";
+ list shared-cell-copy-entities {
+ key name;
+ description
+ "copy entity. The north-node is an O-DU or an O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name{
+ type string;
+ description
+ "the name of shared-cell-copy-entity.";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell copy entity
+ associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set;
+
+ container shared-cell-copy-uplane-config {
+ if-feature FHM;
+ description
+ "Container consists of uplane-info for copy-configuration for FHM.";
+
+ list tx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-tx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ leaf downlink-radio-frame-offset {
+ type uint32 {
+ range 0..12288000;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting the starting position of 10ms radio frame.
+ Note: Unit is 1/1.2288e9 sec.
+ This node is not relevant to copy function and is deprecated.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting SFN value.Unit is 10ms.
+ Unit is 10ms.
+ This node is not relevant to copy function and is deprecated.";
+ }
+ }
+ } // shared-cell-copy-entities
+ } // shared-cell-copy-configuration (groupings)
+
+ grouping shared-cell-copy-configuration-for-selective-beam-id {
+ description
+ "shared-cell-copy-configuration for selective function by beam id";
+ list shared-cell-copy-entities-selective-beam-id {
+ key name;
+ description
+ "copy entity. The north-node is an O-DU or an O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name {
+ type string;
+ description
+ "the name of shared-cell-copy-entity.";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell copy entity
+ with selective bean id associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set-for-selective-beam-id;
+
+ container shared-cell-copy-uplane-config {
+ if-feature FHM;
+ description
+ "Container consists of uplane-info for copy-configuration for FHM.";
+
+ list tx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-tx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ leaf downlink-radio-frame-offset {
+ type uint32 {
+ range 0..12288000;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting the starting position of 10ms radio frame.
+ Note: Unit is 1/1.2288e9 sec.
+ This node is not relevant to copy function and is deprecated.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting SFN value.Unit is 10ms.
+ Unit is 10ms.
+ This node is not relevant to copy function and is deprecated.";
+ }
+ }
+ } // shared-cell-copy-entities for SELECTIVE-BEAM-ID
+ } // shared-cell-copy-configuration (groupings) for SELECTIVE-BEAM-ID
+
+ grouping shared-cell-combine-configuration {
+ description
+ "shared-cell-combine-configuration";
+
+ list shared-cell-combine-entities {
+ key name;
+ description
+ "combine configuration. The north-node is O-DU or O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name{
+ type string;
+ description
+ "name of shared-cell-combine-entity";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell combine entity
+ associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+
+ uses processing-element-set;
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages belong to combine-entity";
+ }
+
+ leaf ta3-prime-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "indicates the latest time that FHM or cascade O-RU is allowed to
+ send UL U-plane message to north-node relative to reception
+ timing at O-RU antenna.";
+ }
+
+ leaf tx-duration {
+ type uint32;
+ units nanoseconds;
+ description
+ "informs FHM/Cascade O-RU of the maximum duration time of transmission
+ over the fronthaul interface to O-DU or north-node for messages
+ to be sent within Ta3-prime-max.";
+ }
+
+ uses shared-cell-combine-uplane-config;
+ }
+ }
+
+ grouping shared-cell-combine-configuration-for-selective-beam-id {
+ description
+ "shared-cell-combine-configuration for selective function by beam id";
+
+ list shared-cell-combine-entities-for-selective-beam-id {
+ key name;
+ description
+ "combine configuration. The north-node is O-DU or O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name {
+ type string;
+ description
+ "name of shared-cell-combine-entity";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell combine entity
+ for selective beam id associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set;
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages belong to combine-entity";
+ }
+
+ leaf ta3-prime-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "indicates the latest time that FHM or cascade O-RU is allowed to
+ send UL U-plane message to north-node relative to reception
+ timing at O-RU antenna.";
+ }
+
+ leaf tx-duration {
+ type uint32;
+ units nanoseconds;
+ description
+ "informs FHM/Cascade O-RU of the maximum duration time of transmission
+ over the fronthaul interface to O-DU or north-node for messages
+ to be sent within Ta3-prime-max.";
+ }
+
+ uses shared-cell-combine-uplane-config;
+ }
+ }
+
+
+ grouping shared-cell-combine-uplane-config {
+ description
+ "shared cell related uplane configuration applicable to O-RU which
+ doesn't have radio transmission capability";
+ container shared-cell-combine-uplane-config {
+ if-feature FHM;
+ description
+ "when O-RU doesn't have radio transmission availability for FHM mode,
+ the required u-plane configuration for copy and combine function
+ are defined, instead of the lists of o-ran-uplane-conf.yang";
+
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to combine";
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxc-id to be read by CU-Plane";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ description
+ "Determines max number of PRBs that can be scheduled in all sections
+ per one symbol.
+ This value is used when uplink C-plane message indicates that all PRBs
+ is indicated in the field of numPrbc or tx-duration is calculated.";
+ }
+
+ leaf-list cp-ul-section-type {
+ type enumeration {
+ enum ST1 {
+ description
+ "section type 1 is used.";
+ }
+ enum ST3P{
+ description
+ "section type 3 is used for PRACH .";
+ }
+ enum ST3M{
+ description
+ "section type 3 is used for PUxCH when mixed numeroloy is applied.";
+ }
+ }
+ description
+ "indicates what section type is used for a specific eaxc-id with a specfic
+ SCS/frameStructure which belongs to this combine-entity.";
+ }
+
+ container comression-method {
+ description
+ "for combine mechanism, compression method per eaxc-id applied in
+ south-node is known to FHM ";
+ uses cf:compression-details;
+ }
+ }
+
+ uses radio-offset;
+
+ leaf n-ta-offset {
+ type uint32;
+ units Tc;
+ mandatory true;
+ description
+ "Value of configurable N-TA offset
+ units are Tc=~0.5ns=1/1.96608GHz";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ mandatory true;
+ status deprecated;
+ description
+ "Determines max number of PRBs that will be used in all sections
+ per one symbol.
+ This value is used only when uplink C-plane message indicates that
+ all PRB is used in the field of numPrbc
+
+ This node is deprecated and replaced by number-of-prb in the list of rx-eaxc-id.
+ This movement is intended to prevent the fragmentation of shared-cell-combine-entities
+ according to the different value of number-of-prb.";
+ }
+ }
+ }
+
+// top-level container
+ container shared-cell{
+ description
+ "This container for shared-cell consists of capability information and
+ configurable parameters";
+ uses shared-cell-module-capability;
+
+ container shared-cell-config {
+ description "configuration for shared cell.";
+ uses shared-cell-mode;
+
+ leaf max-num-rx-eaxc-ids-per-group {
+ if-feature FHM;
+ type leafref {
+ path "/o-ran-sc:shared-cell/o-ran-sc:shared-cell-module-cap/o-ran-sc:eaxc-id-group-capabilities/o-ran-sc:max-num-rx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "RW value of max-num-rx-eaxc-ids-per-group";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ if-feature FHM;
+ type leafref {
+ path "/o-ran-sc:shared-cell/o-ran-sc:shared-cell-module-cap/o-ran-sc:eaxc-id-group-capabilities/o-ran-sc:max-num-rx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "RW value of max-num-rx-eaxc-id-groups";
+ }
+
+ list rx-eaxc-id-group {
+ if-feature FHM;
+ must "count(../rx-eaxc-id-group) <= ../max-num-rx-eaxc-id-groups" {
+ error-message "too many rx-eaxcid-id groups";
+ }
+ key "representative-rx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs.
+ Each group is a union of a 'representative-rx-eaxc-id'and 'member-rx-eaxc-id's.
+ When section type 3 C-Plane in UL direction is used with Section Extension 10 in the shared cell,
+ this group shall be informed to FHM.";
+ leaf representative-rx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-rx-eaxc-id'(s).";
+ }
+ leaf-list member-rx-eaxc-id {
+ type uint16;
+ must "count(../member-rx-eaxc-id) <= ../../max-num-rx-eaxc-ids-per-group" {
+ error-message "too many rx-eaxcid-id members";
+ }
+ must "current()!=../representative-rx-eaxc-id" {
+ error-message "the representative eaxcid does not need to be a list member";
+ }
+ description
+ "This is a list of member eAxC IDs,which is associated with 'representative-rx-eaxc-id' in a group.";
+ }
+ }
+
+ leaf enhanced-t-combine-enabled {
+ if-feature feat:ENHANCED-T-COMBINE;
+ type boolean;
+ default false;
+ description
+ "O-DU informs FHM/Cascade O-RU that t-combine-net and tx-duration
+ are used to calculate T-waiting instead of t-combine.";
+ }
+
+ leaf multiple-scs-in-eaxc-used {
+ if-feature feat:MULTIPLE-SCS-IN-EAXC;
+ type boolean;
+ default false;
+ description
+ "O-DU informs FHM/Cascade O-RU that multiple scs or
+ multiple section types in a single eAxC id are used.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-software-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:software-management:1.0";
+ prefix o-ran-swm;
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import o-ran-hardware {
+ prefix "o-ran-hw";
+ }
+
+ import o-ran-file-management {
+ prefix "o-ran-file-mgmt";
+ }
+
+ import o-ran-wg4-features {
+ prefix "or-feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.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 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 11.1.0
+
+ 1) remove import by revision date for ietf-inet-types.";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) SW Install timeout
+ 2) check integrity directly after download";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 9.1.0
+
+ 1) clarified description statements
+ 2) style guide corrections
+ 3) changed import prefix for o-ran-file-management";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) aded new parameter build-content-download";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions
+ 2) new option to use IANA private enterprise number as vendor-code";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) added FTPES support";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.0.2
+
+ 1) backward compatible changes to correct sFTP Server Authentication .
+ 2) simplifying file management and authentication to reuse from o-ran-file-management module
+ 3) minor fixes according to lack of descriptions
+ 4) removal of not used grouping
+ 5) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+
+ // groupings
+
+ grouping slot-group {
+ description
+ "Contains information about each software slot and its content.";
+ list software-slot {
+ key name;
+ min-elements 2;
+
+ description
+ "Information about available software-slots, their status, state and content.";
+
+ leaf name {
+ type string;
+
+ description
+ "Name of the software slot. This shall be unique to identify the software-slot.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum VALID {
+ description
+ "Slot contains software considered as proven valid";
+ }
+ enum INVALID {
+ description
+ "Software in the slot is considered by O-RU as invalid (e.g. wrong CRC).
+ O-RU prohibits activation of slot with such status.";
+ }
+ enum EMPTY {
+ description
+ "Slot does not contain software package. O-RU prohibits activation of slot
+ with such status.";
+ }
+ }
+ 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 writeability 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/o-ran-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..5;
+ pattern '(.{1,2})|(\d{1,5})';
+ }
+ config false;
+
+ description
+ "Unique code of the vendor. This is derived from manifest file.
+
+ This may be a 1 or two upper case characters or a 1-5 digit IANA Private Enterprise Number.";
+ }
+
+ leaf build-id {
+ type string;
+ config false;
+
+ description
+ "Identity associated with the software. 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 string;
+ description "The vendor-specific version string of the software build.";
+ }
+
+ list files {
+ key "name";
+ config false;
+
+ description "List of all the files present in the software slot.";
+
+ 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.";
+ }
+ }
+ }
+ }
+
+ grouping download-input {
+ description
+ "Grouping for SW download RPC input";
+ leaf remote-file-path {
+ type inet:uri;
+ mandatory true;
+ description
+ "URI of the software image including username.
+ The following format is possible:
+ When file download is via sftp, the format shall be of the form
+ sftp://<username>@<host>[:<port>]/path
+ When file transfer is via FTPES, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES.";
+ }
+
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+ grouping download-output {
+ description
+ "Grouping for SW download RPC 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 file download";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+
+ leaf notification-timeout {
+ type int32 {range "1..max";}
+ units seconds;
+ default 30;
+
+ description
+ "Notification timeout is the time NETCONF client shall
+ wait for a 'download-event' notification from O-RU. If there is no
+ 'download-event' notification received within notification-timeout,
+ NETCONF client shall assume the download timeout/failure, and follow necessary steps.";
+ }
+ }
+
+ grouping install-input {
+ description
+ "Grouping for SW installation RPC 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.";
+ }
+
+ leaf-list file-names {
+ type string;
+
+ description
+ "Names of the files within software package to be installed";
+ }
+ }
+
+ grouping install-output {
+ description
+ "Grouping for SW installation RPC 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 installation to software slot.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+
+ leaf sw-install-timeout {
+ type int32 {range "1..max";}
+ units seconds;
+
+ description
+ "Optional timeout indicated by O-RU after which time
+ an 'install-event' notification will be sent indicating
+ the installation procedure has timed out.";
+ }
+ }
+
+ grouping activate-input {
+ description
+ "Grouping for SW activation RPC input";
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+ must "/software-inventory/software-slot[name = current()][status = 'VALID']" {
+ error-message "software activation may be requested only on VALID slot!";
+ }
+ mandatory true;
+
+ description
+ "Slot name on which software has to be activated.";
+ }
+ }
+
+ grouping activate-output {
+ description
+ "Grouping for SW activation RPC 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 {range "1..max";}
+ units seconds;
+ default 30;
+
+ description
+ "Timeout on client waiting for the activate event";
+ }
+ }
+
+ grouping download-notification {
+ description
+ "Grouping for notification event structure for download completion";
+ leaf file-name {
+ type string;
+ mandatory true;
+
+ description
+ "File name of transferred software file.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum COMPLETED {
+ description
+ "Operation completed successfully";
+ }
+ enum AUTHENTICATION_ERROR {
+ description "Source available, wrong credentials";
+ }
+ enum PROTOCOL_ERROR {
+ description "SFTP or FTPES errors";
+ }
+ enum FILE_NOT_FOUND {
+ description "Source not available.";
+ }
+ enum APPLICATION_ERROR {
+ description "Application related errors";
+ }
+ enum TIMEOUT {
+ description "Timeout waiting for download";
+ }
+ enum INTEGRITY_ERROR {
+ description "File is corrupted";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+
+ grouping install-notification {
+ description
+ "Grouping for 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 successfully";
+ }
+ 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";
+ }
+ enum TIMEOUT {
+ description "Install operation timed out";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+
+ grouping activation-notification {
+ description
+ "Grouping for 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 successfully";
+ }
+ 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";
+ }
+ }
+
+ // top-level container
+
+ container software-inventory {
+ config false;
+ description
+ "Contains information about each software slot and its content as well as information related to
+ software processing.";
+
+ uses slot-group;
+
+ leaf build-content-download {
+ type empty;
+ description
+ "An optional leaf used to indicate that the O-RU requires separate download procedures to be
+ re-used for downloading individual files in a software build, instead of a single archived package.";
+ }
+
+ leaf integrity-check-at-download-enabled {
+ if-feature or-feat:INTEGRITY-CHECK-AT-SW-DOWNLOAD;
+ type empty;
+ description "Presence of this node enables O-RU to perform integrity check at file download.";
+ }
+
+ }
+ // RPC statements
+
+ rpc software-download {
+ description
+ "RPC needed to perform software download operation.";
+
+ input {
+ uses download-input;
+ }
+ output {
+ uses download-output;
+ }
+ }
+
+ rpc software-install {
+ description
+ "Install a previously downloaded software.";
+
+ input {
+ uses install-input;
+ }
+ output {
+ uses install-output;
+ }
+ }
+
+ rpc software-activate {
+ description
+ "Activate a previously installed software.";
+ input {
+ uses activate-input;
+ }
+ output {
+ uses activate-output;
+ }
+ }
+
+ // notification definitions
+ notification download-event {
+ description "Notification event structure for download completion";
+ uses download-notification;
+
+ }
+
+ notification install-event {
+ description "Notification event structure for installation completion";
+ uses install-notification;
+ }
+
+ notification activation-event {
+ description "Notification event structure for activation completion";
+ uses activation-notification;
+ }
+}
--- /dev/null
+module o-ran-supervision {
+ yang-version 1.1;
+ namespace "urn:o-ran:supervision:1.0";
+ prefix "o-ran-supervision";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+ import ietf-netconf-monitoring {
+ prefix ncm;
+ }
+
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration data and supervision RPCs that are
+ used to detect loss M-Plane connectivity.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) NETCONF session supervison with session id";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced SHARED-ORU-MULTI-ODU and SHARED-ORU-MULTI-OPERATOR features.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.
+ 2) removed non-ACSII characters.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added Event Producer-Collector supervision";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added output string to enable indication if config modification change has failed
+ 2) corrected model description
+ 3) removed erroneous text in notification description";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added leafs for CU plane monitoring
+ 2) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+
+
+ typedef event-collector-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "An Event Collector identifier";
+ }
+
+ grouping watchdog-input {
+ description "a watchdog input grouping";
+ leaf supervision-notification-interval {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The interval in seconds at which supervision notifications are sent.
+ If not specified the default value of 60 seconds shall apply.";
+ }
+ leaf guard-timer-overhead {
+ type uint16;
+ units seconds;
+ default 10;
+ description
+ "This is overhead added to the supervision timer used to calculate the
+ supervision watchdog timer. i.e.,
+
+ supervision timer = notification timer + guard-timer-overhead
+
+ If not specified the default value of 10 seconds shall apply.
+
+ Failure to send this RPC again within the timeout sets the radio into
+ 'loss of supervision' state.
+
+ NOTE - The supervision timer MUST not be less that the confirmed
+ timeout timer (when the feature is supported).
+
+ This type of constraint (using an RPC's input) cannot be formally
+ expressed in YANG.";
+ }
+ }
+
+ grouping watchdog-output {
+ description "a watchdog output grouping";
+ leaf next-update-at {
+ type yang:date-and-time;
+ description
+ "Indicates the time when the next supervision notification is expected.";
+ }
+
+ leaf error-message {
+ type string;
+
+ description
+ "An optional error message, e.g., used when the RPC input attempts to
+ modify a locked running configuration.
+
+ Take note, the supervision-notification-interval and guard-timer-overhead
+ have default values and so their values can be modified even when a leaf is
+ not included in the RPC input.";
+ }
+ }
+
+ grouping supervision-notification-data {
+ description "a supervision notification data grouping";
+ leaf session-id {
+ if-feature or-feat:SUPERVISION-WITH-SESSION-ID;
+ type leafref {
+ path "/ncm:netconf-state/ncm:sessions/ncm:session/ncm:session-id";
+ }
+ mandatory true;
+ description
+ "This value uniquely identifies the NETCONF session in an O-RU. The value is conveyed to NETCONF client in hello message.
+ the session-id for the netconf session is sent as part of each supervision-notification notification.
+ and may be used for create-subscription to filter the relevant
+ notifications";
+ }
+ }
+
+ grouping supervision-group {
+ description "a supervision grouping";
+ container cu-plane-monitoring {
+ presence
+ "Indicates O-RU supports timer based cu-plane monitoring interval. If
+ this container is NOT present, the operation of the O-RU is undefined.";
+ description "container describing operation of CU plane monitoring";
+
+ leaf configured-cu-monitoring-interval {
+ type uint8 {
+ range "0..160";
+ }
+ units milliseconds;
+ default 160;
+ description
+ "This value corresponds to the configured value of the timer used by
+ the O-RU to monitor the C/U plane connection.
+
+ A value of 0 means that the O-RU's shall disable its CU plane
+ monitoring.
+
+ A NETCONF client should configure the value according to the
+ configuration of the PHY layer and/or C/U plane section types
+ supported and/or any fault tolerant operation. For example,
+
+ i) when operating with an O-DU supporting non-LAA LTE, this value can
+ be configured to a value according to the repetition time of
+ transmitted reference symbols across the fronthaul interface
+ ii) when operating with an O-DU supporting C-Plane Section Type 0,
+ this value can configured to a value according to the minimum
+ repetition interval of section type 0.
+ iii) when operating with an O-DU supporting fault tolerant operation,
+ this value can be configured according to the fault tolerant heartbeat
+ interval ";
+ }
+ }
+ container event-collector-monitoring {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ description "container describing operation of Event Collector monitoring";
+
+ leaf heartbeat-interval {
+ type uint8;
+ units seconds;
+ default 60;
+ description "the heartbeat interval";
+ }
+
+ leaf-list heartbeat-recipient-id {
+ type event-collector-id;
+ description
+ "A configured Event collector identity, to which the O-RU shall send heartbeat notifications";
+ }
+ }
+ container per-odu-monitoring {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU or or-feat:SHARED-ORU-MULTI-OPERATOR";
+ presence
+ "Indicates at least one of the O-RU Controllers intends to operate per O-DU supervision.";
+ description "container describing per-odu monitoring parameters";
+
+ list odu-ids {
+ if-feature or-feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "an optional list of o-du identities that an O-RU controller intends to use with per
+ O-DU supervision in a single operator envrionment. The odu-id values are used to match
+ values received in the supervision-watchdog-reset rpc together with values configured in
+ o-ran-uplane-conf based configuration.
+ The O-RU does not further interpret the specific value of odu-id.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU and or-feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "an optional list of sro and o-du identities that an O-RU controller intends to use with per
+ O-DU supervision in a multi-operator envrionment. The sro-id and odu-id values are used to match
+ values received in the supervision-watchdog-reset rpc together with values configured in
+ o-ran-uplane-conf based configuration.
+ The O-RU does not further interpret the specific value of sro-id or odu-id.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+ }
+ }
+
+ container supervision {
+ description "top leval supervision container";
+ uses supervision-group;
+ // other WG specific monitoring containers follow here
+ }
+
+ rpc supervision-watchdog-reset {
+ description
+ "rpc to reset the watchdog timer";
+ input {
+ uses watchdog-input;
+
+ container context {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU or or-feat:SHARED-ORU-MULTI-OPERATOR";
+ description
+ "an optional container that defines the context associated with the
+ watchdog reset. Context can be used in supervision operations with
+ multiple O-DUs";
+
+ leaf odu-id {
+ if-feature or-feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "an optional o-du identity associated with this
+ supervision watchdog operation. If an odu-id received is not configured
+ in the list of tx-array-carriers or list of rx-array carriers, this leaf is ignored.
+ When it does correspond to an odu-id listed in tx-array-carriers and/or
+ rx-array-carriers, the odu-id is used in the operatrion of per O-DU supervision.";
+ }
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The shared resource identity associated with the current NETCONF session.
+ A supervision-watchdog-reset RPC received from NETCONF client
+ with user-group privileges of 'carrier' MUST be rejected
+ if it is received without a sro-id leaf.
+ In other scenarios, this leaf is optional and ignored by the O-RU.";
+ }
+ }
+ }
+
+ output {
+ uses watchdog-output;
+ }
+ }
+
+ notification supervision-notification {
+ description
+ "Notification to indicate that NETCONF management interface is up.";
+ uses supervision-notification-data;
+
+ }
+}
--- /dev/null
+module o-ran-sync {
+ yang-version 1.1;
+ namespace "urn:o-ran:sync:1.0";
+ prefix "o-ran-sync";
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines synchronization mechanism for the O-RAN Equipment.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new sync capability for multi-port O-RU.
+ 2) added support for extended SSM and QL TLV.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 8.1.0
+
+ 1) clarifiy description of quality-level";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add support for boundary clock indication";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.4.0
+
+ 1) typographical corrections in descriptions.
+ 2) Description alignment with specification.";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 1.3.0
+
+ 1) Update description of ENCHANCED (sic) under container sync-capability leaf sync-t-tsc with
+ correct reference to IEEE 802.1CM sections.
+ 2) Add description that CLASS_B and ENHANCED are as per IEEE802.1CM.
+ 3) Add freq-error and time-error leafs under container sync-status. This allows an O-DU to
+ query the O-RU using NETCONF <get> procedure about the phase and frequency errors at
+ any time.
+ 4) Move delay-asymmetry outside of container g-8275-1-config as the delay asymmetry
+ is applicable to G.8275.2 as well
+ 5) Add gnss-rx-error in gnss-data for LLS-C4 configuration
+ 6) Correct the description of state enumerations under synce-status. The earlier
+ descriptions were copy paste from ptp-status";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 1.2.0
+
+ 1) enable O-RU to only support GNSS and not 802.1CM.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature GNSS {
+ description
+ "This feature indicates that the equipment supports integrated GNSS functionality.";
+ }
+
+ feature ANTI-JAM {
+ description
+ "This feature indicates that the equipment supports Anti-jam functionality";
+ }
+
+ typedef ssm-code {
+ type enumeration {
+ enum PRC {
+ description
+ "PRC";
+ }
+ enum PRS {
+ description
+ "PRS";
+ }
+ enum SSU_A {
+ description
+ "SSU_A";
+ }
+ enum SSU_B {
+ description
+ "SSU_B";
+ }
+ enum ST2 {
+ description
+ "ST2";
+ }
+ enum ST3 {
+ description
+ "ST3";
+ }
+ enum ST3E {
+ description
+ "ST3E";
+ }
+ enum EEC1 {
+ description
+ "EEC1";
+ }
+ enum EEC2 {
+ description
+ "EEC2";
+ }
+ enum DNU {
+ description
+ "DNU";
+ }
+ enum PRTC {
+ description
+ "PRTC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum ePRTC {
+ description
+ "ePRTC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum eEEC {
+ description
+ "eEEC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum ePRC {
+ description
+ "ePRC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum NONE {
+ description
+ "NONE";
+ }
+ }
+ description
+ "List of SyncE SSMs quality levels.";
+ }
+
+
+ typedef geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ grouping sync-group {
+ description "This group represents the state and status of timing and synchronization of the O-RU";
+ container sync-status {
+ config false;
+
+ description
+ "Object of this class provides synchronization state of the module.";
+
+ leaf sync-state {
+ type enumeration {
+ enum LOCKED {
+ description
+ "equipment is in the locked mode, as defined in ITU-T G.810";
+ }
+ enum HOLDOVER {
+ description
+ "equipment clock is in holdover mode";
+ }
+ enum FREERUN {
+ description
+ "equipment clock isn't locked to an input reference, and is not in the holdover mode";
+ }
+ }
+ mandatory true;
+ description
+ "State of DU synchronization";
+ }
+ leaf time-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units nanoseconds;
+ description
+ "An optional leaf indicating an estimate of the current time error in the O-RU,
+ e.g., derived from a low pass filtering of the residual error of the PLL.
+ The definition of the filtering and updating is left to O-RU implementation.";
+ }
+ leaf frequency-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units parts-per-billion;
+ description
+ "An optional leaf indicating an estimate of the current frequency error in the O-RU,
+ e.g., derived from a low pass filtering of the residual error of the PLL.
+ The definition of the filtering and updating is left to O-RU implementation.";
+ }
+
+ 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 CLASS_B {
+ description
+ "Regular accuracy (previously referred to class B) for synchronization
+ is supported by the device as per IEEE802.1CM clause 6.4.1, Case 1.1";
+ }
+ enum ENCHANCED {
+ description
+ "Enhanced accuracy for synchronization is supported by the device as per
+ IEEE802.1CM clause 6.4.1, Case 1.2.
+
+ The typo in the name of the enumeration (ENCHANCED instead of ENHANCED)
+ is kept as is for backwards compatibility";
+ }
+ }
+ description
+ "When the O-RU supports 802.1CM, this leaf provides information about
+ T-TSC capability";
+
+ reference "IEEE 802.1CM";
+ }
+
+ leaf boundary-clock-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports the T-BC profiles in ITU-T G.8275.1.";
+ }
+ leaf extended-ql-tlv-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports the extended QL TLV as per ITU-T G.8264.";
+ }
+ }
+
+ 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.";
+ }
+
+ list accepted-clock-classes {
+ key clock-classes;
+ leaf clock-classes {
+ type uint8;
+ description
+ "PTP Clock Class accepted by the O-RU";
+ }
+ description
+ "Contains list of PTP acceptable Clock Classes, sorted in the descending order.";
+ }
+
+ leaf ptp-profile {
+ type enumeration {
+ enum G_8275_1 {
+ description
+ "Usage of multicast over Ethernet";
+ }
+
+ enum G_8275_2 {
+ description
+ "Usage of unicast over IP";
+ }
+ }
+ default "G_8275_1";
+ description
+ "Type of profile to be used in PTP setting";
+ }
+ 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 O-RU.
+ The error is defined in units of nanoseconds in the range +/-10 000 ns.
+
+ If the deprecated delay-asymmetry schema node in the g-8275-1-config container is configured
+ together with this schema node, then the O-RU shall use this schema node and ignore the
+ value in the g-8275-1-config container.";
+ }
+
+ container g-8275-1-config {
+ when "../ptp-profile='G_8275_1'";
+
+ description
+ "Container allowing for configuration of G8275.1";
+
+ leaf multicast-mac-address {
+ type enumeration {
+ enum FORWARDABLE {
+ description
+ "means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";
+ }
+ enum NONFORWARDABLE {
+ description
+ "means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";
+ }
+ }
+ default FORWARDABLE;
+ description
+ "The parameter defines destination MAC address, used by the DU in the egress PTP messages.";
+ }
+
+ leaf delay-asymmetry {
+ type int16 {
+ range -10000..10000;
+ }
+ default 0;
+ status deprecated;
+ description
+ "Defines static phase error in the recovered PTP timing signal to be compensated at the O-RU.
+ The error is defined in units of nanoseconds in the range +/-10 000 ns.";
+ }
+
+ list sources {
+ if-feature or-feat:PER-PORT-PTP-CONFIG;
+ must "(time-transmitter-only = 'true' and not-time-transmitter = 'false') or (time-transmitter-only = 'false' and not-time-transmitter = 'true') or (time-transmitter-only = 'false' and not-time-transmitter = 'false')"{
+ error-message
+ "Combination of time-transmitter-only and not-time-transmitter not allowed";
+ }
+ key local-port-number;
+ description
+ "Per port synchronization PTP sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,
+ where the PTP signal is located.";
+ }
+
+ leaf time-transmitter-only {
+ type boolean;
+ default false;
+ description
+ "This parameter defines if source is time transmitter only.";
+ }
+
+ leaf not-time-transmitter {
+ type boolean;
+ default false;
+ description
+ "This parameter defines if source is not time transmitter.";
+ }
+
+ leaf local-priority {
+ type uint8;
+ default 128;
+ description
+ "This parameter defines local priority used in the ITU-T 8275.1 best PTP source selection.";
+ }
+ }
+ }
+
+ container g-8275-2-config {
+ when "../ptp-profile='G_8275_2'";
+
+ description
+ "Container used for configuration of G8275.2 profile";
+
+ leaf local-ip-port {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Reference to interface name corresponding to IP interface
+ used for G.8275.2";
+ }
+
+ list master-ip-configuration {
+ key local-priority;
+ description
+ "The parameter defines list of IP configuration of devices acting as PTP signal source.";
+ leaf local-priority {
+ type uint8;
+ description
+ "The parameter defines local priority or underlying timeTransmitter IP address.";
+ }
+
+ leaf ip-address {
+ type string;
+ description
+ "the parameter defines timeTransmitter IP address.";
+ }
+ }
+
+ leaf log-inter-sync-period {
+ type int8 {
+ range "-7..0";
+ }
+
+ description
+ "The parameter defines number of sync message during 1 second";
+ }
+
+ leaf log-inter-announce-period {
+ type int8 {
+ range "-3..0";
+ }
+
+ description
+ "The parameter defines number of announce message during 1 second";
+ }
+ }
+ }
+
+ 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 O-RU, 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 O-RU";
+ }
+
+ leaf clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ config false;
+ description
+ "This parameter contains identity of the clock,
+ according to IEEE 1588-2008 definition, controlled by the O-RU.
+ The string shall be formatted as an 8-octet hex value with the '0x' prefix.";
+ }
+
+ leaf partial-timing-supported {
+ type boolean;
+ config false;
+ description
+ "Provides information wheter G.8275.2 (partial timing support from network) is supported.";
+ }
+
+ list sources {
+ key local-port-number;
+ config false;
+
+ description
+ "Synchronization sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ 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 timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, can potentially synchronize to,
+ i.e. clock class and priority, announced by the timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, has an operational connection to,
+ but the class or priority of the timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, has no operational connection to.
+ This applies to ports not receiving Announce messages i.e.
+ ports unused or in time transmitter state.";
+ }
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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).
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf source-clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf source-port-number {
+ type uint16;
+ description
+ "This parameter reflects value of the sourcePortNumber attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf priority1 {
+ type uint8;
+ description
+ "This parameter reflects value of the priority1 attribute in Announce
+ messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf clock-class {
+ type uint8;
+ description
+ "This parameter reflects value of the clockClass attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf clock-accuracy {
+ type uint8;
+ description
+ "This parameter reflects value of the clockAccuracy attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf offset-scaled-log-variance {
+ type uint16;
+ description
+ "This parameter reflects value of the offsetScaledLogVariance
+ attribute in Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf priority2 {
+ type uint8;
+ description
+ "This parameter reflects value of the priority2 attribute in Announce
+ messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf grandmaster-clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf time-source {
+ type uint8;
+ description
+ "This parameter reflects value of the timeSource attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+ }
+ }
+
+ container synce-config {
+ description
+ "This container defines the configuration of SyncE";
+
+ leaf-list acceptance-list-of-ssm {
+ type ssm-code;
+ default "PRC";
+ description
+ "The parameter contains the list of SyncE acceptable SSM quality levels.";
+ }
+
+ leaf ssm-timeout {
+ type uint16;
+ description
+ "The parameter contains the value of maximum duration in seconds for which the actual SSM value may be different than configured values.";
+ }
+ list sources {
+ if-feature or-feat:PER-PORT-SYNCE-CONFIG;
+ key local-port-number;
+ description
+ "Per port synchronization SYNCE sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,
+ where the SyncE signal is located.";
+ }
+
+ leaf ssm-send-enable{
+ type boolean;
+ default true;
+ description
+ "This parameter defines if ESMC messages with SSM quality level are sent on this port.";
+ }
+
+ leaf local-priority {
+ type uint8;
+ default 0;
+ description
+ "The parameter defines the priority of the SyncE source as per ITU-T G.781.
+ A value 0 configures a port that is not nominated for SyncE source selection.
+ The smaller the value (except 0), the higher the priority.";
+ }
+ }
+ }
+
+ 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 O-RU, 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ 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 this is the primary SyncE source recovering SyncE signal.";
+ }
+ enum OK {
+ description
+ "Indicates that this source is an alternate SyncE source, which the clock,
+ controlled by the NETCONF Server, can potentially synchronize to, when the
+ clock quality of the primary SyncE signal advertised in ESMC packets is
+ lower than the expected or configured clock quality; or when this source
+ clock's quality is better than the primary SyncE source clock quality.";
+ }
+ enum NOK {
+ description
+ "Indicates that this source is an alternate SyncE source, and the O-RU
+ has an operational connection to this alternate SyncE source, but the
+ clock's quality is not in the configured acceptable range.
+ This includes the case when DNU quality level is received on the port";
+ }
+ enum DISABLED {
+ description
+ "Indicates that this source is an alternate SyncE clock, and the O-RU has an
+ operational connection to this alternate SyncE source.
+ This applies to ports not receiving ESMC messages i.e.,
+ ports unused.";
+ }
+ }
+ description
+ "This parameter indicates status of the SyncE source";
+ }
+
+ leaf quality-level {
+ type uint8 {
+ range 0..15;
+ }
+ description
+ "This parameter contains the value of the SSM quality level code,
+ received in ESMC messages from the SyncE source.
+ If multiple clock sources are available, the O-RU can select the
+ reference clock source based on the SSM quality level.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf enhanced-ssm-code {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "This parameter contains the value of the enhanced SSM quality level code,
+ received in ESMC messages from the SyncE source.";
+ }
+
+ leaf ssm-quality-level {
+ type ssm-code;
+ description
+ "This parameter contains human readable value of the enhanced SSM quality level,
+ received in ESMC messages from the SyncE source.";
+ }
+
+ leaf originator-synce-clock-id {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ description
+ "This parameter reflects the value of sourceClockIdentity attribute in
+ Extended QL TLV messages, received from the SyncE source.
+ The string shall be formatted as an 8-octet hex value with the '0x'
+ prefix.";
+ }
+
+ leaf flag0-mixed-eec-eeec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type boolean;
+ description
+ "Mixed EEC/eEEC (i.e., TRUE if at least one of the clocks is not an eEEC; FALSE if all clocks are eEEC)";
+ }
+
+ leaf flag1-partial-chain {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type boolean;
+ description
+ "Partial chain (i.e., TRUE if the TLV has been generated in the middle of the chain and the count of the EEC/eEEC is incomplete)";
+ }
+
+ leaf number-of-eeec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "Number of cascaded eEECs from the nearest SSU/PRC/ePRC";
+ }
+
+ leaf number-of-eec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "Number of cascaded EECs from the nearest SSU/PRC/ePRC";
+ }
+ min-elements 1;
+ description
+ "This parameter contains characteristics of SyncE sources of the clock, controlled by the O-RU.";
+ }
+ }
+
+ container gnss-config {
+ if-feature GNSS;
+ description
+ "This container defines the configuration of Global Navigation Satellite System (GNSS).";
+
+ leaf enable {
+ type boolean;
+
+ description
+ "This parameter defines if GNSS receiver shall be enabled or not.";
+ }
+
+ leaf-list satellite-constelation-list {
+ type enumeration {
+ enum GPS {
+ description
+ "GPS";
+ }
+ enum GLONASS {
+ description
+ "GLONASS should not be used alone but always along with GPS or BEIDOU because of missing leap second information";
+ }
+ enum GALILEO {
+ description
+ "GALILEO";
+ }
+ enum BEIDOU {
+ description
+ "BEIDOU";
+ }
+ }
+
+ description
+ "This parameter defines list of constellations to be used to acquire synchronization.";
+ }
+
+ leaf polarity {
+ type enumeration {
+ enum POSITIVE {
+ description
+ "POSITIVE";
+ }
+ enum NEGATIVE {
+ description
+ "NEGATIVE";
+ }
+ }
+ default POSITIVE;
+
+ description
+ "This parameter defines pulse polarity";
+ }
+
+ leaf cable-delay {
+ type uint16 {
+ range "0..1000";
+ }
+ default 5;
+
+ description
+ "This parameter is used to compensate cable delay.";
+ }
+
+ leaf anti-jam-enable {
+ if-feature ANTI-JAM;
+ type boolean;
+ default false;
+ description
+ "This parameter is used to enable or disable anti-jamming.";
+ }
+ }
+
+ container gnss-status {
+ if-feature GNSS;
+ description
+ "Provides information about state of gps receiver";
+ leaf reporting-period {
+ type uint8;
+ default 10;
+ description
+ "This parameter defines minimum period in seconds between reports,
+ sent by the O-RU, for parameters in this container.";
+ }
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ config false;
+ description
+ "A name that is unique that identifies a GNSS instance.
+ This name may be used in fault management to refer to a
+ fault source or affected object";
+ }
+ leaf gnss-sync-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";
+ }
+ }
+ config false;
+ description "when available, indicates the status of the gnss receiver.";
+ }
+ container gnss-data {
+ when "../gnss-sync-status='SYNCHRONIZED'";
+ config false;
+ 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.";
+ }
+ }
+ leaf gnss-rx-time-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units nanoseconds;
+ description
+ "An optional leaf, representing the estimate of current GNSS receiver time error ";
+ }
+ }
+ }
+ }
+ container sync {
+ description
+ "Main containter for sync related parameters";
+
+ uses sync-group;
+ }
+
+ //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 equipment 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 equipment 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 equipment 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-status/gnss-sync-status";
+ }
+ description
+ "gnss-state-change notification is signalled from equipment at state change";
+ }
+ }
+
+}
--- /dev/null
+module o-ran-synchronization {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:synchronization:1.0";\r
+ prefix o-ran-synchronization;\r
+\r
+ import ietf-interfaces {\r
+ prefix if;\r
+ }\r
+ import o-ran-interfaces {\r
+ prefix o-ran-int;\r
+ }\r
+\r
+ organization\r
+ "O-RAN Alliance";\r
+ contact\r
+ "www.o-ran.org";\r
+ description\r
+ "This module defines synchronization mechanism for the O-RAN Equipment.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ feature GNSS {\r
+ description\r
+ "This feature indicates that the equipment supports local GNSS functionality.";\r
+ }\r
+\r
+ feature ANTI-JAM {\r
+ description\r
+ "This feature indicates that the equipment supports Anti-jam functionality";\r
+ }\r
+\r
+ typedef geographic-coordinate-degree {\r
+ type decimal64 {\r
+ fraction-digits 8;\r
+ }\r
+ description\r
+ "Decimal degree (DD) used to express latitude and longitude\r
+ geographical coordinates.";\r
+ }\r
+\r
+ grouping sync-source-status-grp {\r
+ description\r
+ "Synchronization state grouping";\r
+ leaf sync-source-status {\r
+ type enumeration {\r
+ enum IN_USE {\r
+ description\r
+ "Indicates that this source is the current master clock, i.e. the clock,\r
+ which the clock, controlled by the device, is synchronized to";\r
+ }\r
+ enum USABLE {\r
+ description\r
+ "Indicates that this source is an alternate master, which the clock,\r
+ controlled by the device, can potentially synchronize to,\r
+ i.e. clock class and priority, announced by the master clock is lower,\r
+ compared to those of the clock, controlled by the device,\r
+ and and the clock class is accepted";\r
+ }\r
+ enum NOT_USABLE {\r
+ description\r
+ "Indicates that this source is an alternate master, which the clock,\r
+ controlled by the device, has an operational connection to,\r
+ but the class or priority of the master clock is higher or equal\r
+ to those of the clock, controlled by the device,\r
+ or the clock class is not accepted";\r
+ }\r
+ enum NOT_IN_USE {\r
+ description\r
+ "Indicates that this source is an alternate master, which the clock,\r
+ controlled by the device, has no operational connection to";\r
+ }\r
+ }\r
+ description\r
+ "This parameter indicates statuses of relevant synchronization sources";\r
+ }\r
+ }\r
+\r
+ grouping ptp-status-grp {\r
+ description\r
+ "Grouping for PTP status parameters";\r
+ container ptp-status {\r
+ description\r
+ "Precise Time Protocol status container.";\r
+ leaf reporting-period {\r
+ type uint8;\r
+ default "10";\r
+ description\r
+ "This parameter defines minimum period in seconds between reports,\r
+ sent by the device, for parameters in this container.";\r
+ }\r
+ leaf clock-class {\r
+ type uint8;\r
+ config false;\r
+ description\r
+ "This parameter contains the clock class of the clock, controlled by the device";\r
+ }\r
+ leaf clock-identity {\r
+ type string {\r
+ length "18";\r
+ pattern '0[xX][0-9a-fA-F]{16}';\r
+ }\r
+ config false;\r
+ description\r
+ "This parameter report the PTP clockID of the local clock.\r
+ The string shall be formatted as an 8-octet hex value with the '0x' prefix.";\r
+ }\r
+ list sources {\r
+ key "source-clock-identity";\r
+ config false;\r
+ description\r
+ "List of available PTP Synchronization sources.";\r
+ uses sync-source-status-grp;\r
+ leaf clock-class {\r
+ type uint8;\r
+ description\r
+ "This parameter reflects value of the clockClass attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf clock-accuracy {\r
+ type uint8;\r
+ description\r
+ "This parameter reflects value of the clockAccuracy attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf offset-scaled-log-variance {\r
+ type uint16;\r
+ description\r
+ "This parameter reflects value of the offsetScaledLogVariance\r
+ attribute in PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf priority1 {\r
+ type uint8;\r
+ description\r
+ "This parameter reflects value of the priority1 attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf priority2 {\r
+ type uint8;\r
+ description\r
+ "This parameter reflects value of the priority2 attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf grandmaster-clock-identity {\r
+ type string {\r
+ length "18";\r
+ pattern '0[xX][0-9a-fA-F]{16}';\r
+ }\r
+ description\r
+ "This parameter reflects value of the grandmasterClockIdentity attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+ The string shall be formatted as an 8-octet hex value with the '0x'\r
+ prefix.";\r
+ }\r
+ leaf source-clock-identity {\r
+ type string {\r
+ length "18";\r
+ pattern '0[xX][0-9a-fA-F]{16}';\r
+ }\r
+ config false;\r
+ description\r
+ "This parameter reflects value of the sourceClockIdentity attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+ The string shall be formatted as an 8-octet hex value with the '0x'\r
+ prefix.";\r
+ }\r
+ leaf source-port-number {\r
+ type uint16;\r
+ description\r
+ "This parameter reflects value of the sourcePortNumber attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value send by the decive to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf steps-removed {\r
+ type uint16;\r
+ description\r
+ "This parameter reflects value of the stepsRemoved attribute in\r
+ Announce messages, received from the PTP source.\r
+\r
+ It indicates the number of communication paths traversed\r
+ between the local clock and the grandmaster clock.\r
+\r
+ Note: Applicable for the device receiving PTP Announce message.";\r
+ }\r
+ leaf local-port-number {\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";\r
+ }\r
+ description\r
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,\r
+ where the PTP signal is located.";\r
+ }\r
+ leaf ptp-timescale {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the ptpTimescale flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When set, the clock timescale of the grandmaster clock is PTP;\r
+ otherwise, the timescale is ARB (arbitrary)";\r
+ }\r
+ leaf time-source {\r
+ type uint8;\r
+ description\r
+ "This parameter reflects value of the timeSource attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf time-traceable {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the timeTraceable flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When true, the timescale and the currentUtcOffset are traceable to a\r
+ primary reference.";\r
+ }\r
+ leaf frequency-traceable {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the frequencyTraceable flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When true, the frequency determining the timescale is traceable to a\r
+ primary reference.";\r
+ }\r
+ leaf current-utc-offset {\r
+ type int16;\r
+ description\r
+ "The offset between TAI and UTC when the epoch of the PTP system is\r
+ the PTP epoch, i.e., when ptp-timescale is TRUE; otherwise, the value\r
+ has no meaning.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ leaf current-utc-offset-valid {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the currentUtcOffsetValid flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When true, the current UTC offset is valid.";\r
+ }\r
+ leaf leap61 {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the leap61 flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When true, the last minute of the current UTC day contains 61 seconds.";\r
+ }\r
+ leaf leap59 {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the leap59 flag in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.\r
+\r
+ When true, the last minute of the current UTC day contains 59 seconds.";\r
+ }\r
+ leaf two-step-flag {\r
+ type boolean;\r
+ description\r
+ "This parameter reflects status of the twoStepFlag attribute in\r
+ PTP Announce messages.\r
+ Note: When device is PTP master, this is value sent by the device to PTP Announce message.\r
+ Otherwise this is value received from the PTP Announce message.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ grouping sync-group {\r
+ description\r
+ "Grouping for synchronization top container.";\r
+ container sync-functions {\r
+ description\r
+ "Container for collecting synchronization functions.";\r
+ leaf sync-state {\r
+ type enumeration {\r
+ enum LOCKED {\r
+ description\r
+ "Device is in the locked mode, as defined in ITU-T G.810";\r
+ }\r
+ enum HOLDOVER {\r
+ description\r
+ "Device clock is in holdover mode, as defined in ITU-T G.810";\r
+ }\r
+ enum FREERUN {\r
+ description\r
+ "Device clock isn't locked to an input reference,\r
+ and is not in the holdover mode, as defined in ITU-T G.810";\r
+ }\r
+ }\r
+ config false;\r
+ mandatory true;\r
+ description\r
+ "State of device synchronization";\r
+ }\r
+ container sync-capability {\r
+ config false;\r
+ description\r
+ "Container describing capabilities of synchronization.";\r
+ leaf partial-timing-supported {\r
+ type boolean;\r
+ config false;\r
+ description\r
+ "Provides information whether G.8275.2 (partial timing support from network)\r
+ is supported.";\r
+ }\r
+ list supported-reference-types {\r
+ key "sync-source";\r
+ min-elements 1;\r
+ description\r
+ "Synchronization sources that are supported as reference by the device.";\r
+ leaf sync-source {\r
+ type enumeration {\r
+ enum GNSS {\r
+ description\r
+ "GNSS can be taken as a synchronization source";\r
+ }\r
+ enum PTP {\r
+ description\r
+ "Precision Time Protocol can be taken as a synchronization source";\r
+ }\r
+ enum SYNCE {\r
+ description\r
+ "Synchronous Ethernet can be taken as a synchronization source";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Synchronization source type";\r
+ }\r
+ }\r
+ }\r
+ container sync-config {\r
+ description\r
+ "Defines configuration for synchronization functionality";\r
+ list sync-priority-config {\r
+ key "sync-source";\r
+ max-elements 2;\r
+ ordered-by user;\r
+ description\r
+ "Priority ordered list of synchronization sources.";\r
+ leaf sync-source {\r
+ type enumeration {\r
+ enum GNSS {\r
+ description\r
+ "GNSS can be taken as a synchronization source";\r
+ }\r
+ enum PTP {\r
+ description\r
+ "Precision Time Protocol can be taken as a synchronization source";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Synchronization source type";\r
+ }\r
+ }\r
+ leaf synce-enabled {\r
+ type boolean;\r
+ description\r
+ "Flag which allows to enable additional SyncE synchronization.";\r
+ }\r
+ }\r
+ container ptp-config {\r
+ description\r
+ "Defines configuration of Precise Time Protocol.";\r
+ leaf domain-number {\r
+ type uint8;\r
+ default "24";\r
+ description\r
+ "This parameter indicates Domain Number for PTP announce messages.";\r
+ }\r
+ list accepted-clock-classes {\r
+ key "clock-classes";\r
+ description\r
+ "Contains list of PTP acceptable Clock Classes, sorted in the descending order.";\r
+ leaf clock-classes {\r
+ type uint8;\r
+ description\r
+ "PTP Clock Class accepted by the module";\r
+ }\r
+ }\r
+ leaf delay-asymmetry {\r
+ type int16 {\r
+ range "-10000..10000";\r
+ }\r
+ units "ns";\r
+ default "0";\r
+ description\r
+ "Defines static phase error in the recovered PTP timing signal\r
+ to be compensated at the device.\r
+ The error is defined in units of nanoseconds in the range ±10 000 ns.";\r
+ }\r
+ leaf ptp-profile {\r
+ type enumeration {\r
+ enum G_8275_1 {\r
+ description\r
+ "Usage of multicast over ethernet";\r
+ }\r
+ enum G_8275_2 {\r
+ description\r
+ "Usage of unicast over IP";\r
+ }\r
+ }\r
+ default "G_8275_1";\r
+ description\r
+ "Type of profile to be used in ptp setting";\r
+ }\r
+ container g-8275-1-config {\r
+ when "../ptp-profile='G_8275_1'";\r
+ description\r
+ "Container allowing for configuration of G.8275.1";\r
+ leaf multicast-mac-address {\r
+ type enumeration {\r
+ enum FORWARDABLE {\r
+ description\r
+ "Means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";\r
+ }\r
+ enum NONFORWARDABLE {\r
+ description\r
+ "Means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";\r
+ }\r
+ }\r
+ default "FORWARDABLE";\r
+ description\r
+ "The parameter defines destination MAC address,\r
+ used by the device in the egress PTP messages.";\r
+ }\r
+ }\r
+ container g-8275-2-config {\r
+ when "../ptp-profile='G_8275_2'";\r
+ description\r
+ "Container used for configuration of G.8275.2 profile";\r
+ leaf local-ip-port {\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/if:name";\r
+ }\r
+ description\r
+ "Reference to interface name corresponding to IP interface\r
+ used for G.8275.2";\r
+ }\r
+ list master-ip-configuration {\r
+ key "local-priority";\r
+ description\r
+ "The parameter defines list of ip configuration of devices acting\r
+ as ptp signal source.";\r
+ leaf local-priority {\r
+ type uint8;\r
+ description\r
+ "This parameter allows the configuration of relative priority between PTP masters\r
+ Note: the lower the value the higher priority.";\r
+ }\r
+ leaf ip-address {\r
+ type string;\r
+ description\r
+ "The parameter defines master IP address.";\r
+ }\r
+ }\r
+ leaf log-inter-sync-interval {\r
+ type int8 {\r
+ range "-7..0";\r
+ }\r
+ description\r
+ "Log interval for sync messages";\r
+ }\r
+ leaf log-inter-announce-interval {\r
+ type int8 {\r
+ range "-3..0";\r
+ }\r
+ description\r
+ "The parameter defines number of announce message during 1 second";\r
+ }\r
+ }\r
+ }\r
+ uses ptp-status-grp;\r
+ container synce-config {\r
+ description\r
+ "This container defines the configuration of SyncE";\r
+ leaf-list acceptance-list-of-ssm {\r
+ type enumeration {\r
+ enum PRC {\r
+ description\r
+ "PRC";\r
+ }\r
+ enum PRS {\r
+ description\r
+ "PRS";\r
+ }\r
+ enum SSU_A {\r
+ description\r
+ "SSU_A";\r
+ }\r
+ enum SSU_B {\r
+ description\r
+ "SSU_B";\r
+ }\r
+ enum ST2 {\r
+ description\r
+ "ST2";\r
+ }\r
+ enum ST3 {\r
+ description\r
+ "ST3";\r
+ }\r
+ enum ST3E {\r
+ description\r
+ "ST3E";\r
+ }\r
+ enum EEC1 {\r
+ description\r
+ "EEC1";\r
+ }\r
+ enum EEC2 {\r
+ description\r
+ "EEC2";\r
+ }\r
+ enum DNU {\r
+ description\r
+ "DNU";\r
+ }\r
+ enum NONE {\r
+ description\r
+ "NONE";\r
+ }\r
+ }\r
+ default "PRC";\r
+ description\r
+ "SyncE SSM Quality Level values acceptable.";\r
+ }\r
+ leaf ssm-timeout {\r
+ type uint16;\r
+ default "5";\r
+ description\r
+ "The parameter contains the value of maximum duration in seconds for which\r
+ the actual SSM value may be different than configured values.";\r
+ }\r
+ }\r
+ container synce-status {\r
+ description\r
+ "SyncE status container";\r
+ leaf reporting-period {\r
+ type uint8;\r
+ default "10";\r
+ description\r
+ "This parameter defines minimum period in seconds between reports,\r
+ sent by the NETCONF client, for parameters in this container.";\r
+ }\r
+ list sources {\r
+ key "source-clock-identity";\r
+ config false;\r
+ description\r
+ "This parameter contains characteristics of SyncE sources of the clock,\r
+ controlled by the device";\r
+ leaf source-clock-identity {\r
+ type string {\r
+ length "18";\r
+ pattern '0[xX][0-9a-fA-F]{16}';\r
+ }\r
+ config false;\r
+ description\r
+ "This is reference to source MAC address, from which the SyncE signal is received.\r
+\r
+ The string shall be formatted as an 8-octet hex value with the '0x'\r
+ prefix.";\r
+ }\r
+ uses sync-source-status-grp;\r
+ leaf quality-level {\r
+ type uint8 {\r
+ range "0..15";\r
+ }\r
+ description\r
+ "This parameter contains value of the SSM clock quality level,\r
+ received in SSM messages from the SyncE source.";\r
+ }\r
+ }\r
+ }\r
+ container gnss-config {\r
+ if-feature "GNSS";\r
+ description\r
+ "This container defines the configuration of Global Navigation Satellite System (GNSS).";\r
+ leaf enable {\r
+ type boolean;\r
+ description\r
+ "This parameter defines if GNSS receiver shall be enabled or not.";\r
+ }\r
+ leaf-list satellite-constellation-list {\r
+ type enumeration {\r
+ enum GLONASS {\r
+ description\r
+ "GLONASS should not be used alone but always along with GNSS\r
+ or BEIDOU because of missing leap second information";\r
+ }\r
+ enum GALILEO {\r
+ description\r
+ "GALILEO";\r
+ }\r
+ enum BEIDOU {\r
+ description\r
+ "BEIDOU";\r
+ }\r
+ enum GPS {\r
+ description\r
+ "GPS";\r
+ }\r
+ }\r
+ description\r
+ "This parameter defines list of constellations to be used to acquire synchronization.";\r
+ }\r
+ leaf polarity {\r
+ type enumeration {\r
+ enum POSITIVE {\r
+ description\r
+ "POSITIVE";\r
+ }\r
+ enum NEGATIVE {\r
+ description\r
+ "NEGATIVE";\r
+ }\r
+ }\r
+ default "POSITIVE";\r
+ description\r
+ "This parameter defines pulse polarity";\r
+ }\r
+ leaf cable-delay {\r
+ type uint16 {\r
+ range "0..2000";\r
+ }\r
+ units "ns";\r
+ default "0";\r
+ description\r
+ "This parameter is used to compensate cable delay. Value in nanoseconds.";\r
+ }\r
+ leaf anti-jam-enable {\r
+ if-feature "ANTI-JAM";\r
+ type boolean;\r
+ default "false";\r
+ description\r
+ "This parameter is used to enable or disable anti-jamming.";\r
+ }\r
+ }\r
+ container gnss-status {\r
+ if-feature "GNSS";\r
+ description\r
+ "Provides information about state of GNSS receiver";\r
+ leaf reporting-period {\r
+ type uint8;\r
+ default "10";\r
+ description\r
+ "This parameter defines minimum period in seconds between reports,\r
+ sent by the NETCONF Client, for parameters in this container.";\r
+ }\r
+ leaf name {\r
+ type string {\r
+ length "1..255";\r
+ }\r
+ config false;\r
+ description\r
+ "A name that is unique that identifies a GNSS instance.\r
+ This name may be used in fault management to refer to a\r
+ fault source or affected object";\r
+ }\r
+ uses sync-source-status-grp;\r
+ leaf gnss-sync-status {\r
+ type enumeration {\r
+ enum SYNCHRONIZED {\r
+ description\r
+ "GNSS functionality is synchronized";\r
+ }\r
+ enum ACQUIRING-SYNC {\r
+ description\r
+ "GNSS functionality is acquiring sync";\r
+ }\r
+ enum ANTENNA-DISCONNECTED {\r
+ description\r
+ "GNSS functionality has its antenna disconnected";\r
+ }\r
+ enum BOOTING {\r
+ description\r
+ "GNSS functionality is booting";\r
+ }\r
+ enum ANTENNA-SHORT-CIRCUIT {\r
+ description\r
+ "GNSS functionality has an antenna short circuit";\r
+ }\r
+ }\r
+ config false;\r
+ description\r
+ "When available, indicates the status of the GNSS receiver.";\r
+ }\r
+ container gnss-data {\r
+ when "../gnss-sync-status='SYNCHRONIZED'";\r
+ config false;\r
+ description\r
+ "GNSS data contained";\r
+ leaf satellites-tracked {\r
+ type uint8;\r
+ description\r
+ "Number of satellites tracked";\r
+ }\r
+ container location {\r
+ description\r
+ "Contains information about geo location";\r
+ leaf altitude {\r
+ type int64;\r
+ units "millimeter";\r
+ description\r
+ "Elevation above the sea level.";\r
+ }\r
+ leaf latitude {\r
+ type geographic-coordinate-degree {\r
+ range "-90..90";\r
+ }\r
+ units "degrees";\r
+ description\r
+ "Geographic coordinate that specifies the north–south position\r
+ of a point on the Earth's surface. Latitude is an angle (defined below)\r
+ which ranges from 0° at the Equator to 90° (North or South) at the poles.";\r
+ }\r
+ leaf longitude {\r
+ type geographic-coordinate-degree {\r
+ range "-180..180";\r
+ }\r
+ units "degrees";\r
+ description\r
+ "Measurement of location east or west\r
+ of the prime meridian at Greenwich, the specially\r
+ designated imaginary north-south line that passes through\r
+ both geographic poles and Greenwich, London.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ container sync-master-functions {\r
+ description\r
+ "Container for collecting sync master parameters";\r
+ container sync-master-capabilities {\r
+ config false;\r
+ description\r
+ "Property parameters to expose device's ability to act as synchronization master.";\r
+ container ptp-sync-master-capabilities {\r
+ description\r
+ "Container for PTP sync master capabilities";\r
+ leaf ptp-sync-master-supported {\r
+ type boolean;\r
+ description\r
+ "TRUE - device is able to serve as PTP synchronization master.\r
+ FALSE - PTP synchronization master functions are not supported by device.";\r
+ }\r
+ }\r
+ container synce-sync-master-capabilities {\r
+ description\r
+ "Container for SyncE sync master capabilities";\r
+ leaf synce-sync-master-supported {\r
+ type boolean;\r
+ description\r
+ "TRUE - device is able to serve as SyncE synchronization master.\r
+ FALSE - SyncE synchronization master functions are not supported by device.";\r
+ }\r
+ }\r
+ }\r
+ container sync-master-configuration {\r
+ description\r
+ "Configuration for synchronization master functions";\r
+ container ptp-master-configuration {\r
+ description\r
+ "Configuration for PTP sync master function";\r
+ leaf-list ptp-master-enabled-local-port-numbers {\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";\r
+ }\r
+ description\r
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,\r
+ where the PTP is provided.";\r
+ }\r
+ leaf domain-number {\r
+ type uint8;\r
+ default "24";\r
+ description\r
+ "This parameter indicates Domain Number for PTP announce messages.";\r
+ }\r
+ leaf multicast-mac-address {\r
+ type enumeration {\r
+ enum FORWARDABLE {\r
+ description\r
+ "Means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";\r
+ }\r
+ enum NONFORWARDABLE {\r
+ description\r
+ "Means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";\r
+ }\r
+ }\r
+ default "FORWARDABLE";\r
+ description\r
+ "The parameter defines destination MAC address,\r
+ used by the device in the egress PTP messages.";\r
+ }\r
+ leaf clock-identity {\r
+ type string {\r
+ length "18";\r
+ pattern '0[xX][0-9a-fA-F]{16}';\r
+ }\r
+ config false;\r
+ description\r
+ "This parameter contains identity of the clock,\r
+ according to IEEE 1588-2008 definition, controlled by the device.\r
+ The string shall be formatted as an 8-octet hex value with the '0x' prefix.";\r
+ }\r
+ leaf priority2 {\r
+ type uint8;\r
+ description\r
+ "This parameter configures value of the priority2 attribute in Announce messages.";\r
+ }\r
+ }\r
+ uses ptp-status-grp;\r
+ container synce-master-configuration {\r
+ description\r
+ "Container for SyncE master configuration.";\r
+ leaf-list synce-master-enabled-local-port-numbers {\r
+ type leafref {\r
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";\r
+ }\r
+ description\r
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,\r
+ where the SyncE is provided.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ container sync {\r
+ description\r
+ "Main container for sync related parameters";\r
+ uses sync-group;\r
+ }\r
+}\r
--- /dev/null
+module o-ran-trace {
+ yang-version 1.1;
+ namespace "urn:o-ran:trace:1.0";
+ prefix "o-ran-trace";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for the trace logs.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified path/folder description.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.1.0
+
+ 1) Typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.0.0
+
+ 1) Initial module definition.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ grouping trace-status-grouping {
+ description "grouping used for trace 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-trace-logs {
+ description
+ "Management plane triggered to start collecting the trace logs files of O-RU.";
+ output {
+ uses trace-status-grouping;
+ }
+ }
+
+ rpc stop-trace-logs {
+ description
+ "Management plane triggered to stop collecting the trace logs files of O-RU.";
+ output {
+ uses trace-status-grouping;
+ }
+ }
+
+ notification trace-log-generated {
+ description
+ "When new log file generated, send this notification.";
+ leaf-list log-file-name {
+ type string;
+ description
+ "The list of trace log file names on the O-RU. Each record in this list is expected to contain
+ location of the file (e.g. 'o-ran/log/') and the name of file (e.g.'my_trace_log_file.zip', where
+ 'my_trace_log_file' is example file name and 'zip' is expected file name extension).
+ Example complete expected content of this node is 'o-ran/log/my_trace_log_file.zip'.";
+ }
+
+ leaf is-notification-last {
+ type boolean;
+ default false;
+ description
+ "Informs if notification is last - the one after receiving stop-trace-logs RPC.";
+ }
+ }
+}
--- /dev/null
+module o-ran-transceiver {
+ yang-version 1.1;
+ namespace "urn:o-ran:transceiver:1.0";
+ prefix "o-ran-transceiver";
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operational state data for SFP transceivers used in
+ an O-RAN Radio Unit.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-04-10" {
+ description
+ "version 11.1.0
+
+ 1) Max length of vendor-rev is changed from 2 to 4";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) enable more than one interface to be accessible through a transceiver";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced new SFP compliance codes and updated references";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 2.1.0
+
+ 1) typographical corrections in descriptions
+ 2) clarifying vendor name follows SFF 8472";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) introduction of reporting for QSFP.
+ 2) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ // Groupings
+
+ grouping transceiver-group {
+ description "a transceiver grouping";
+ list port-transceiver-data {
+ key "interface-name port-number";
+ description
+ "Data recovered from port transceivers.
+ A single entry in the list is created per transceiver.";
+ leaf interface-name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Name of an interface accessible through the transceiver.
+
+ If operating with a QSFP, then the interface corresponds
+ to an interface accessible through the lane/channel 1 of the QSFP.
+
+ If more than one interface is accessible through the transceiver
+ or the lane/channel 1 of the QSFP, then O-RU arbitrarily chooses
+ the referenced interface instance.";
+ }
+
+ leaf port-number {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../interface-name]" + "/o-ran-int:port-reference/o-ran-int: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-list interface-names {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Names of all interfaces accessible through the transceiver.
+
+ If operating with a QSFP, then the interfaces correspond
+ to all interfaces accessible through the lane/channel 1 of the QSFP.
+
+ O-RU provides the values only if more than one interface is
+ accessible through the transceiver or the lane/channel 1 of the QSFP.";
+ }
+
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the O-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 transceiver 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. When used, the content of this schema node
+ follows the definition of Vendor name field in SFF-8472.";
+ }
+
+ 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. When used, the content of this schema node
+ follows the definition of Vendor PN field in SFF-8472.";
+ }
+
+ leaf vendor-rev {
+ type string {
+ length 1..4;
+ }
+ config false;
+ description
+ "Transceiver vendors revision number. 2-octet (QSFP) or 4-octet (SFP)
+ field that contains ASCII characters.
+
+ Optional node included when the NETCONF Server has determined
+ the vendor revision number. When used, the content of this schema
+ node follows the definition of Vendor Rev field in SFF-8472.";
+ }
+
+ 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{
+ status deprecated;
+ description
+ "diagnostics published 08-28-14
+ Note: Deprecated as it does not exists in SFF-8472 v12.4";
+ }
+ enum rev10.4-diagnostics{
+ description "diagnostics published 30-01-09";
+ }
+ enum rev12.3-diagnostics{
+ description "diagnostics published 29-07-18";
+ }
+ enum rev12.4-diagnostics{
+ description "diagnostics published 31-03-21";
+ }
+ }
+ config false;
+ description
+ "Indication of which feature set(s) are
+ implemented in the transceiver from Byte 94 of address A0h
+ https://members.snia.org/document/dl/25916 v12.4
+
+ Optional node included when the NETCONF Server has determined
+ the compliance code.";
+
+ reference "https://members.snia.org/document/dl/25916";
+ }
+
+ 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.
+
+ Optional node included when the NETCONF Server has determined
+ the connector type.";
+ reference "https://ta.snia.org/higherlogic/ws/public/document?document_id=944";
+ }
+
+ leaf identifier {
+ type enumeration {
+ enum unknown {
+ description "encoded as 00h in Table 4-1 of SFF-8024";
+ }
+ enum gbic {
+ description "encoded as 01h in Table 4-1 of SFF-8024";
+ }
+ enum soldered {
+ description "encoded as 02h in Table 4-1 of SFF-8024";
+ }
+ enum sfp {
+ description "encoded as 03h in Table 4-1 of SFF-8024";
+ }
+ enum xbi {
+ description "encoded as 04h in Table 4-1 of SFF-8024";
+ }
+ enum xenpack {
+ description "encoded as 05h in Table 4-1 of SFF-8024";
+ }
+ enum xfp {
+ description "encoded as 06h in Table 4-1 of SFF-8024";
+ }
+ enum xff {
+ description "encoded as 07h in Table 4-1 of SFF-8024";
+ }
+ enum xfp-e {
+ description "encoded as 08h in Table 4-1 of SFF-8024";
+ }
+ enum xpak {
+ description "encoded as 09h in Table 4-1 of SFF-8024";
+ }
+ enum x2 {
+ description "encoded as 0Ah in Table 4-1 of SFF-8024";
+ }
+ enum dwdm-sfp {
+ description "encoded as 0Bh in Table 4-1 of SFF-8024";
+ }
+ enum qsfp {
+ description "encoded as 0Ch in Table 4-1 of SFF-8024";
+ }
+ enum qsfp+ {
+ description "encoded as 0Dh in Table 4-1 of SFF-8024";
+ }
+ }
+ config false;
+ description
+ "Connector identifier as defined in the identifier
+ types derived from table 4-1 in SFF-8024.
+
+ Optional node included when the NETCONF Server has determined
+ the identifier type.";
+ reference "https://members.snia.org/document/dl/26423";
+ }
+
+ 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 the 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
+ "Received power measurement type
+ oma = optical modulation amplitude
+ avp = average power
+
+ Optional node included when the NETCONF Server has determined
+ the rx power type.";
+ }
+
+ 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.
+
+ If operating with QSFP, this power corresponds to that of
+ Lane/Channel 1.";
+ }
+
+ 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.
+
+ If operating with QSFP, this bias current corresponds to that of
+ Lane/Channel 1.";
+ }
+
+ 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 Celsius.
+
+ Optional node included when the NETCONF Server has determined
+ the temperature.";
+ }
+
+ list additional-multi-lane-reporting {
+ when "(../identifier ='qsfp')or(../identifier ='qsfp+')";
+ key lane;
+ config false;
+ description
+ "Additional reporting according to SFF8436 which specifies real time
+ channel monitoring for each transmit and receive channel and includes
+ optical input power and Tx bias current. ";
+
+ leaf lane {
+ type uint8 {
+ range "2..4";
+ }
+ description
+ "the specific lane/channel associated with the report parameters";
+ }
+ leaf-list interface-names {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Names of all interfaces accessible through a particular lane/channel.";
+ }
+ 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 for a particular lane/channel
+ - see tabel 7-10 of SFF-8636.";
+ }
+ 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 for a particular lane/channel
+ - see tabel 7-10 of SFF-8636.";
+ }
+ 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 or a particular lane/channel
+ - see tabel 7010 of SFF-8636.";
+ }
+ }
+ }
+
+ }
+
+ // Top Level Container
+
+ 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)";
+
+ uses transceiver-group;
+ }
+}
--- /dev/null
+module o-ran-troubleshooting {
+ yang-version 1.1;
+ namespace "urn:o-ran:troubleshooting:1.0";
+ prefix "o-ran-trblsht";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for the troubleshooting logs.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified path/folder description.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.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 O-RU.";
+ output {
+ uses troubleshooting-status-grouping;
+ }
+ }
+
+ rpc stop-troubleshooting-logs {
+ description
+ "Management plane triggered to stop collecting the troubleshooting logs files of O-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 O-RU. Each record in this list is expected to
+ contain location of the file (e.g. 'o-ran/log/') and the name of file (e.g.'my_troubleshooting_log_file.zip',
+ where 'my_troubleshooting_log_file' is example file name and 'zip' is expected file name extension).
+ Example complete expected content of this node is 'o-ran/log/my_troubleshooting_log_file.zip'.";
+ }
+ }
+}
--- /dev/null
+module o-ran-u-plane-tnl{\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:u-plane-tnl:1.0";\r
+ prefix "o-ran-u-tnl";\r
+ \r
+ organization \r
+ "O-RAN Alliance";\r
+\r
+contact\r
+ "www.o-ran.org";\r
+\r
+description \r
+ "This module defines the YANG definitions for Transport Network Layer (TNL)\r
+ configuration for U-plane end-points at O-DU and O-CU. This module augments \r
+ 3GPP SA5 data models.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the o-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+ \r
+ typedef dscp-marking-value {\r
+ type uint8 {\r
+ range "0..63";\r
+ }\r
+ description "type definition for DSCP marking";\r
+ }\r
+ \r
+ grouping dscp-marking {\r
+ container u-plane-dscp-marking {\r
+ leaf gtpu-management-traffic-dscp {\r
+ type dscp-marking-value;\r
+ mandatory true;\r
+ description "DSCP marking for GTP-U management traffic"; \r
+ }\r
+ list qos-group-index-list {\r
+ key "qos-group-index";\r
+ min-elements 1;\r
+ leaf qos-group-index {\r
+ type uint8 {\r
+ range "1..32";\r
+ }\r
+ mandatory true;\r
+ description "QoS group index";\r
+ }\r
+ leaf nr-pdcp-dscp {\r
+ type dscp-marking-value;\r
+ mandatory true;\r
+ description "DSCP marking for G-PDU containing NR PDCP PDU, but no DDDS"; \r
+ }\r
+ leaf ddds-dscp {\r
+ type dscp-marking-value;\r
+ mandatory true;\r
+ description "DSCP marking for G-PDU including DDDS \r
+ (and possibly also including NR PDCP PDU)"; \r
+ }\r
+ description "List of DSCP profiles, indexed by QoS group index";\r
+ }\r
+ description "container for DSCP markings";\r
+ }\r
+ description "grouping of DSCP markings";\r
+ }\r
+\r
+ \r
+ grouping gtp-configuration {\r
+ container gtp-configuration {\r
+ leaf periodic-echo-timer {\r
+ type uint16 {\r
+ range "60..65535";\r
+ }\r
+ mandatory true;\r
+ description "Periodic timer of GTP Echo message, in seconds";\r
+ }\r
+ leaf t3-response-timer-expiry {\r
+ type uint16 {\r
+ range "1..65535"; \r
+ }\r
+ mandatory true;\r
+ description "T3-response timer expiry value";\r
+ }\r
+ leaf n3-requests {\r
+ type uint16 {\r
+ range "1..65535"; \r
+ }\r
+ mandatory true;\r
+ description "N3-requests count value";\r
+ }\r
+ description "container for GTP configuration"; \r
+ }\r
+ description "grouping GTP configurations"; \r
+ } \r
+ \r
+}
\ No newline at end of file
--- /dev/null
+module o-ran-udp-echo {
+ yang-version 1.1;
+ namespace "urn:o-ran:udpecho:1.0";
+ prefix "o-ran-echo";
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module covers off aspects of interface transport
+ verification for UDP/IP based C/U plane connections based on UDP Echo.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+// groupings
+
+ grouping udp-echo-group {
+ description "a udp echo grouping";
+ leaf enable-udp-echo {
+ type boolean;
+ default false;
+ description
+ "whether O-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 O-RU.";
+ }
+ }
+
+ container udp-echo {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ description "container for udp echo";
+
+ uses udp-echo-group;
+ }
+}
--- /dev/null
+module o-ran-uplane-conf {
+ yang-version 1.1;
+ namespace "urn:o-ran:uplane-conf:1.0";
+ prefix "o-ran-uplane-conf";
+
+ import o-ran-processing-element {
+ prefix "o-ran-pe";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ import o-ran-common-yang-types {
+ prefix "o-ran-cmn";
+ }
+
+ import o-ran-delay-management {
+ prefix "or-dm";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit U-Plane configuration.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add up-link performance improvement functionality, including DMRX-BF-EQ and DMS-BF-NEQ features
+ 2) Introduction of capabilities and configuration for SE27 O-DU controlled dimensionality reduction
+ 3) add support for se-20-multi-sd-punc-pattern
+ 4) add support for VSWR thresholds";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for sending prgSize in SE-21 with ST 5 and ST6.
+ 2) add support for for beamforming list and delay profiles(s) per endpoint.
+ 3) add support for user-group optimization.
+ 4) add support for multiple beamid tables.
+ 5) support pass band for filterindex09 per scs.
+ 6) support for M-plane based TRX control for Network Energy Saving.
+ 7) clarified cp-type is not applicable for ST3 or ST0
+ 8) Changed description of max-beams-per-symbol/slot, so they refer to
+ 'different beamId values' instead of 'beams'
+ 9) added new leafs called max-beams-per-symbol-multiple-beamid-tables
+ and max-beams-per-slot-multiple-beamid-tables";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+
+ 1) Corrected the configurable-tdd-pattern-supported leafref to point
+ to static-low-level-tx-endpoints
+ 2) Clarify reference for supported-frame-structures
+ 3) introduce max-prb-blks-per-sec-ext-23 and se-23-prb-block-mode-supported
+ 4) Introduction of new energy saving sub-use case - Data Layer control";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) clarification for I/Q bitwidth parameter
+ 2) clarification of ul-fft-sampling-offset parameter
+ 3) adding availability status to carrier operational data and notifications
+ 4) ability to disable sequence number checking
+ 5) Introduction of TRX-Control and Advanced Sleep Mode for network energy savings";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) Typographical corrections
+ 2) NB-IoT introduction
+ 3) clarify PRACH repetitions
+ 4) support for non-scheduled-ueid
+ 5) continuity bit information in Section Extension 11
+ 6) U-Plane Processing Limits";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) PRB range limit for SE 12 and HP section
+ 2) Introduction of PRB ranges
+ 3) uplane-only-dl-mode-enable
+ 4) Deprecation of power-related capabilities and addition of min-gain
+ 5) se 23 max mplane limits
+ 6) support Section Type 4 and associated commands";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) clarified description statements for representative-t/rx-eaxc-id
+ 2) clarified description statements for max-num-t/rx-eaxc-ids-per-group
+ 4) clarified description statements for component carrier
+ 5) style guide corrections
+ 6) introduction of O-RU connector functionality
+ 7) fixing constraints
+ 8) introducing new feature for ACK NACK feedback
+ 9) added SHARED-ORU-MULTI-OPERATOR anf SHARED-ORU-MULTI-ODU features";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) Descriptions fixed for max-beam-updates-per-slot / max-beam-updates-per-slot
+ 2) Added references to CUS-Plane spec for parameters 'frame-structure' and
+ 'supported-frame-structures'
+ 3) clarified max-beams-per-symbol, max-beams-per-slot, max-beam-updates-per-slot,
+ max-beam-updates-per-symbol parameters
+ 4) Clarification of cp-length and cp-length-other
+ 5) deprecation of rw-type and rw-duplex-scheme";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) Various descriptions corrected and/or clarified
+ 2) Configuration for Beamforming weights were added together with changes and updates to compressions
+ 3) Added new leaf node 'beam-update-contention-control-limits-required' to 'endpoint-types'
+ to indicate endpoint capability to support beam update contention control processing limits.
+ 4) Added instance of 'beam-update-contention-control-limits' to 'endpoint-types'.
+ 5) Added new leaf node boolean flag 'beam-update-contention-control-enabled' for O-DU to indicate
+ support of feature BEAM-UPDATE-CONTENTION-CONTROL feature.
+ 6) deprecate 'channel-information-iq-bitwidth' , and define a new parameter
+ 'channel-information-bitwidth' under the container 'compression'
+ 7) add capability and configuration for channel information PRB granularity.
+ 8) Add support for multiple transport-session-type per O-RU.
+ 9) add capability and configuration for channel information compression.
+ 10) deprecate 'channel-information-iq-bitwidth' , and define a new parameter
+ 'channel-information-bitwidth' under the container 'compression'";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) Added new grouping 'per-cplane-message-limits' containing params to limit
+ per C-Plane packet processing when CPLANE-MESSAGE-PROCESSING-LIMITS feature is
+ supported by O-RU and used by O-DU.
+ 2) Added new leaf node 'cplane-message-processing-limits-required' to 'endpoint-types'
+ to indicate endpoint capability to support C-Plane message processing limits.
+ 3) Added instances of 'per-cplane-message-limits' to 'endpoint-types' and
+ 'endpoint-capacity-sharing-groups'.
+ 4) Added new leaf node to low-level-tx/rx-endpoint 'cplane-message-processing-limits-enabled'
+ for O-DU to configure support for C-Plane limits
+ 5) Added t-da-offset and t-au-offset for external antenna support
+ 6) Added Channel IQ bitwidth for ST6
+ 7) Added ordered-by user to leaf-list member-tx-eaxc-id and leaf-list member-rx-eaxc-id
+ 8) Added new PRACH formats
+ 9) Ensuring beam-ids can only be 15 bits
+ 10) Clarify mixed numerology restrictions";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Updates to transmission window control.
+ 3) Introduces to existing grouping 'endpoint-section-capacity' two new leaf nodes 'max-uplane-section-header-per-symbol' and
+ 'max-uplane-section-header-per-slot' to limit U-Plane data section header addition/parsing.
+ 4) deprecated parameter 'max-remasks-per-section-id' since it is duplicate of leaf node 'max-control-sections-per-data-section'.
+ 5) introduces new leaf nodes 'max-beams-updates-per-slot' and ''max-beams-updates-per-symbol'
+ to grouping 'endpoint-beam-capacity'
+ 6) added new SRS features:
+ STATIC-TRANSMISSION-WINDOW-CONTROL
+ DYNAMIC-TRANSMISSION-WINDOW-CONTROL
+ UNIFORMLY-DISTRIBUTED-TRANSMISSION
+ ORDERED-TRANSMISSION
+ INDEPENDENT-TRANSMISSION-WINDOW-CONTROL";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) introduces new coupling method coupling-via-frequency-and-time-with-priorities-optimized
+ 2) introduces new max-highest-priority-sections-per-slot parameter";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) parameters allowing for static PRACH configuration introduced
+ 2) parameters allowing for static SRS configuration introduced
+ 3) parameters allowing for configuration of TDD pattern introduced
+ 4) Backward compatible change to introduce new parameter 'coupling-method' related
+ to Section Description Priority to serve for CUS-Plane CR";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) Adding optional little endian support
+ 2) Adding a new capability parameter to indicate that the O-RU
+ supports regularizationFactor in section type 5
+ 3) Added support for Dynamic Spectrum Sharing feature
+ 4) Clarify the supported number of reMasks in RU side
+ 5) Section extension for grouping multiple ports
+ 6) adding PRACH formats to endpoint capabilities";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new leaf multiple-numerology-supported to enable O-RU to report
+ whether it supports multiple numerologies.
+
+ 2) fixing broken constraints (configuration cannot be dependent on
+ operational state). This is a backwards incompatible revision.
+
+ As these constraints only apply when the LAA feature is used, and also
+ when considering the limited number of implementation that need to be
+ taken into consideration for backwards compatibility, it has been
+ agreed to NOT increment the namespace integer.
+
+ 3) added frequency related capabilities for tx-arrays and rx-array
+
+ 4) removed redundant LAA import";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature EAXC-GAIN-CORRECTION {
+ description
+ "Presence of feature indicates that O-RU supports eAxC specific gain correction.";
+ }
+
+ feature TX-REFERENCE-LEVEL {
+ description
+ "Presence of feature indicates that O-RU supports TX gain reference level control";
+ }
+
+ typedef prach-preamble-format {
+ type enumeration {
+ enum LTE-0 {
+ description
+ "LTE PRACH Preamble format 0";
+ }
+ enum LTE-1 {
+ description
+ "LTE PRACH Preamble format 1";
+ }
+ enum LTE-2 {
+ description
+ "LTE PRACH Preamble format 2";
+ }
+ enum LTE-3 {
+ description
+ "LTE PRACH Preamble format 3";
+ }
+ enum LTE-4 {
+ description
+ "LTE PRACH Preamble format 4";
+ }
+ enum LTE-NB0 {
+ description
+ "LTE Narrowband PRACH format 0";
+ }
+ enum LTE-NB1 {
+ description
+ "LTE Narrowband PRACH format 1";
+ }
+ enum NR-0 {
+ description
+ "5GNR PRACH Preamble format 0";
+ }
+ enum NR-1 {
+ description
+ "5GNR PRACH Preamble format 1";
+ }
+ enum NR-2 {
+ description
+ "5GNR PRACH Preamble format 2";
+ }
+ enum NR-3 {
+ description
+ "5GNR PRACH Preamble format 3";
+ }
+ enum NR-A1 {
+ description
+ "5GNR PRACH Preamble format A1";
+ }
+ enum NR-A2 {
+ description
+ "5GNR PRACH Preamble format A2";
+ }
+ enum NR-A3 {
+ description
+ "5GNR PRACH Preamble format A3";
+ }
+ enum NR-B1 {
+ description
+ "5GNR PRACH Preamble format B1";
+ }
+ enum NR-B2 {
+ description
+ "5GNR PRACH Preamble format B2";
+ }
+ enum NR-B3 {
+ description
+ "5GNR PRACH Preamble format B3";
+ }
+ enum NR-B4 {
+ description
+ "5GNR PRACH Preamble format B4";
+ }
+ enum NR-C0 {
+ description
+ "5GNR PRACH Preamble format C0";
+ }
+ enum NR-C2 {
+ description
+ "5GNR PRACH Preamble format C2";
+ }
+ enum LTE-NB0-a {
+ description
+ "LTE Narrowband PRACH format 0-a";
+ }
+ enum LTE-NB1-a {
+ description
+ "LTE Narrowband PRACH format 1-a";
+ }
+ enum LTE-NB2 {
+ description
+ "LTE Narrowband PRACH format 2";
+ }
+ }
+
+ description
+ "PRACH preamble format definition";
+ }
+
+ typedef polarisation_type {
+ type enumeration {
+ enum MINUS_45 {
+ description "MINUS_45";
+ }
+ enum ZERO {
+ description "ZERO";
+ }
+ enum PLUS_45 {
+ description "PLUS_45";
+ }
+ enum PLUS_90 {
+ description "PLUS_90";
+ }
+ }
+ description "Type definition for polarisations";
+ }
+
+ typedef beamforming-method-type {
+ type enumeration {
+ enum NOBF {
+ description
+ "No beamforming.";
+ }
+ enum PDBF {
+ description
+ "Predefined-beam beamforming.";
+ }
+ enum WDBF {
+ description
+ "Weight-based dynamic beamforming (based on real-time-updated weights).";
+ }
+ enum ABBF {
+ description
+ "Attribute-based dynamic beamforming (based on real-time-updated beam attributes).";
+ }
+ enum CIBF {
+ description
+ "Channel-information-based beamforming.";
+ }
+ enum DMRS_BF_EQ {
+ description
+ "DMRS-based beamforming with equalization.";
+ }
+ enum DMRS_BF_NEQ {
+ description
+ "DMRS-based beamforming without equalization.";
+ }
+ }
+ description
+ "Type definition for beamforming method.";
+ }
+
+ typedef symb-reorder-capability {
+ type enumeration {
+ enum PER-TX-WIN-SYMB-REORDER-WITH-DMRS-SENDING {
+ description
+ "per-window symbol reordering when sending of port-reduced DMRS data is enabled,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-TX-WIN-SYMB-REORDER-WITHOUT-DMRS-SENDING {
+ description
+ "per-window symbol reordering when sending of port-reduced DMRS data is not enabled,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-SECTION-TX-WINDOW-REASSIGNMENT {
+ description
+ "per-section tx-window reassignment, please refer to clause 7.7.25.3 of the CUS-Plane
+ Specification.";
+ }
+ }
+ description
+ "Type definition for symbol reordering method supported.";
+ }
+ typedef symb-reorder-method {
+ type enumeration {
+ enum PER-TX-WIN-SYMB-REORDERG {
+ description
+ "per-window symbol reordering,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-SECTION-TX-WINDOW-REASSIGNMENT {
+ description
+ "per-section tx-window reassignment, please refer to clause 7.7.25.3 of the CUS-Plane
+ Specification.";
+ }
+ }
+ description
+ "Type definition for symbol reordering method configured.";
+ }
+ typedef up-SymbolId-type {
+ type enumeration {
+ enum OVER-AIR-SYMBOL-NUMBER {
+ description
+ "U-plane symbol Id interpretation as on-air symbol number for symbol reordering.";
+ }
+ enum TRANSMISSION-WINDOW-NUMBER {
+ description
+ "U-plane symbol Id interpretation as transmission window number for symbol reordering.";
+ }
+ }
+ description
+ "Type definition for symbol reordering symbol Id interpretation capability.";
+ }
+
+ typedef user-group-self-assembly-mode {
+ type enumeration {
+ enum SELF-ASSEMBLY-WITH-GROUP-ID {
+ description
+ "The mode in which the O-RU is capable of assembling user groups using 'usrGroupId' and
+ 'usrGroupSize' fields in SE-24.";
+ }
+ enum SELF-ASSEMBLY-WITHOUT-GROUP-ID {
+ description
+ "The mode in which O-RU is capable of assembling user groups without using 'usrGroupId' and 'usrGroupSize'
+ fields in SE-24, but instead relying on PRB ranges of all UE layers overall all section for assembling
+ user groups.";
+ }
+ }
+ description
+ "Possible values for user group self assembly modes that the O-RU can support.";
+ }
+
+ typedef rrm-meas-types {
+ type enumeration {
+ enum MEAS-UE-TAE {
+ value 0;
+ description
+ "UE timing advance error per UE, per slot";
+ }
+ enum MEAS-UE-LAYER-POWER {
+ value 1;
+ description
+ "UE layer signal power per layer,per slot";
+ }
+ enum MEAS-UE-FREQ-OFFSET {
+ value 2;
+ description
+ "UE frequency offset per UE, per slot";
+ }
+ enum MEAS-IPN-ALLOC {
+ value 3;
+ description
+ "Interference plus Noise for allocated PRBs,per slot or per DMRS symbol group";
+ }
+ enum MEAS-IPN-UNALLOC {
+ value 4;
+ description
+ "Interference plus Noise for unallocated PRBs, per slot or per set of symbols in a slot";
+ }
+ enum MEAS-ANT-DMRS-SNR {
+ value 5;
+ description
+ "DMRS Signal to Noise Ratio per antenna, per layer. ";
+ }
+ }
+ description
+ "RRM measurement types, refer to CUS spec table 9.2.1-1 for details";
+ }
+
+ grouping transmission-buffering-capacity {
+ description
+ "UL U-plane buffering capacity available for scheduled transmission of UL U-plane messages";
+
+ list transmission-buffering-capacity {
+ description
+ "Buffering capacity for specific IQ format.
+ If the list does not contain an entry for particular IQ format than endpoint
+ or group of endpoints then buffering capacity for this IQ format is
+ max-buffered-prbs = 0 and max-buffered-symbols = 0.";
+
+ uses cf:compression-details;
+
+ leaf max-buffered-prbs {
+ type uint32;
+ description
+ "Max number of PRBs (for IQ format given in compression-details) that can be buffered by an endpoint
+ or buffered collectively by group of endpoints sharing capacity. This is divided between symbols buffered";
+ }
+
+ leaf max-buffered-symbols {
+ type uint32;
+ description
+ "Max number of symbols (for IQ format given in compression-details) that can be buffered by an endpoint
+ or buffered collectively by group of endpoints sharing capacity";
+ }
+ }
+ }
+
+ grouping mplane-trx-control-supp-antenna-masks {
+ description
+ "A grouping containing list of antenna masks supported by the O-RU";
+
+ list mplane-supported-trx-control-masks {
+ key "index";
+ description
+ "List of supported M-Plane controlled TRX control masks.";
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list of antenna masks";
+ }
+
+ leaf antenna-mask {
+ type binary;
+ description
+ "M-Plane controlled O-RU supported antenna mask value.";
+ }
+ }
+ }
+ grouping array-config-group {
+ description
+ "This group represents configuration for supported arrays,
+ e.g. mplane trx control mask for supported arrayes";
+
+ list tx-array-antenna-mask-config {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ key array-name;
+ description
+ "List of mplane configured trx antenna mask for supported arrays";
+
+ leaf array-name {
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ require-instance false;
+ }
+ description
+ "Unique name of tx-array. ";
+ }
+ leaf antenna-bitmask {
+ type binary;
+ description
+ "If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,parameter antenna-bitmask may be used for configuration.
+ The parameter antenna-bitmask-index shall not be used for configuration.
+ The antenna mask contains as many binary values as number of array elements associated
+ with respective tx or rx-array. Value of '1' indicates antenna element shall be
+ kept active and value of '0' indicates antenna element should be turned inactive.
+ Refer clause 20.3.2 of M-Plane specification.";
+ }
+ leaf antenna-bitmask-index {
+ type uint8;
+ description
+ "If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index may be used for configuration to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for configuration.";
+ }
+ }
+ list rx-array-antenna-mask-config {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ key array-name;
+ description
+ "List of mplane configured trx antenna mask for supported arrays";
+ leaf array-name {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ require-instance false;
+ }
+ description
+ "Unique name of rx-array. ";
+ }
+
+ leaf antenna-bitmask {
+ type binary;
+ description
+ "If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,parameter antenna-bitmask may be used for configuration.
+ The parameter antenna-bitmask-index shall not be used for configuration.
+ The antenna mask contains as many binary values as number of array elements associated
+ with respective tx or rx-array. Value of '1' indicates antenna element shall be
+ kept active and value of '0' indicates antenna element should be turned inactive.
+ Refer clause 20.3.2 of M-Plane specification.";
+ }
+ leaf antenna-bitmask-index {
+ type uint8;
+ description
+ "If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index may be used for configuration to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for configuration.";
+ }
+ }
+ }
+
+ grouping general-config {
+ description "a group for general configuration";
+
+ container general-config {
+ description "a container for general configuration";
+
+ leaf regularization-factor-se-configured {
+ type boolean;
+ default false;
+ description
+ "Informs if regularization factor in section extension is configured(true) or not(false), this
+ leaf indicates whether the O-DU will send the regularization factor in section extension.
+
+ If the O-RU does not support regularization-factor-se-supported in o-ran-module-cap.yang,
+ this leaf is ignored.";
+ }
+
+ leaf little-endian-byte-order {
+ type boolean;
+ default false;
+
+ description
+ "If little endian byte order for C/U plane data flows is supported by
+ the O-RU, indicates if the O-RU should use little endian byte order
+ for all UL and DL C/U plane data flows.
+
+ If little endian byte order is NOT supported, this node is ignored
+ (and the default big endian byte order used)";
+ }
+
+ leaf uplane-only-dl-mode-enable {
+ if-feature feat:UPLANE-ONLY-DL-MODE;
+ type boolean;
+ default false;
+ description
+ "If set to true, enable IQ data transfer without C-Plane in DL for all
+ endpoints as specified in the CUS specification clause 8.2.2.";
+ }
+
+ leaf st4-for-time-domain-beamforming-weights-enabled {
+ if-feature feat:ST4-SLOT-CONFIG-MSG-SUPPORT;
+ type boolean;
+ default false;
+ description
+ "If O-RU indicates support for Section Type 4 command 'TIME_DOMAIN_BEAM_CONFIG' , O-DU may
+ configure the O-RU to use Section Type 4 TIME_DOMAIN_BEAM_CONFIG command by setting this
+ flag to 'true'. In which case, O-DU shall use only Section Type 4 TIME_DOMAIN_BEAM_CONFIG
+ for specifying time-domain beam information. refer to clause 12.4.3.4.4 of CUS-Plane spec.";
+ }
+
+ leaf seq-id-checking-disabled {
+ if-feature feat:SEQ-ID-CHECKING-CONFIGURABLE;
+ type boolean;
+ default false;
+ description
+ "When the parameter has value true, sequence number checking is disabled.";
+ }
+
+ leaf multiple-beamId-tables-support-enabled {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type boolean;
+ default false;
+ description
+ "When the parameter has value true, O-DU will be able to use multiple beamId table capability of O-RU.
+ O-DU shall be able to associate specific [tr]x-array-carrier with specific beamId table indexes advertised
+ which are advertised in 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes' as part of tx-array
+ and rx-array capabilities.";
+ }
+
+ leaf-list energy-sharing-groups-disabled {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "A list that indicates which energy sharing groups are currently switched off due to data layer control energy saving.
+ By default this list is empty and means that no data layer control energy saving is currently ongoing.
+ This value shall be specific values from the list of 'energy-sharing-group-id' advertised by O-RU
+ inside respective static-low-level-[tr]x-endpoints.";
+ }
+
+ leaf config-symb-reorder-method {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type symb-reorder-method;
+ description
+ "Indicated which symbol reordering method is used. If it's not configured, O-RU shall
+ operate with natural order.";
+ }
+ leaf config-symb-reorder-upSymbId-type {
+ when "../config-symb-reorder-method = 'PER-TX-WIN-SYMB-REORDERG'";
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type leafref {
+ path "../../endpoint-types/supported-symb-reorder-capabilities/up-symbolId-type-supported";
+ require-instance false;
+ }
+ description
+ "Indicated which config-symb-reorder-upSymbId-type intended to be used for symbol reordering,
+ i.e. either 'on-air symbol number' or 'transmission window number' to the O-RU.
+ When 'per-section tx-window reassignment' method is used,
+ the U-Plane symbolId interpretation shall be configured as 'on-air symbol number'
+ Please refer to clause 7.7.25 in CUS plane for details.";
+ }
+
+ leaf ueid-persistence-enabled {
+ if-feature feat:UEID-PERSISTENCE;
+ type boolean;
+ description
+ "Indicates if ueId persistance over multiple slots is enabled.
+ See CUS-Plane clause 7.7.24.10.";
+ }
+
+ leaf ueid-layer-bits-configured {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint8;
+ description
+ "This parameter specified the number of bits configured by the O-DU for specifying ueid layers.";
+ }
+
+ container vswr-thresholds{
+ if-feature feat:CONFIGURABLE-VSWR-THRESHOLDS;
+ description "VSWR thresholds parameters.";
+ container default-vswr-thresholds {
+ config false;
+ leaf default-vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "Default VSWR minor threshold.";
+ }
+ leaf default-vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "Default VSWR major threshold.";
+ }
+ description
+ "Default VSWR thresholds used by this O-RU";
+ }
+ container vswr-thresholds-range {
+ config false;
+ leaf min {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "The lowest allowed VSWR threshold";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "The highest allowed VSWR threshold";
+ }
+ description
+ "VSWR thresholds shall be configured within this range";
+ }
+ container configurable-vswr-thresholds{
+ description "vswr monitoring parameters to be configured by O-RU Controller";
+ leaf global-vswr-monitoring-trigger-power {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "Power threshold for enabling VSWR monitoring.";
+ }
+ leaf global-vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR minor threshold which will be used to trigger an alarm.";
+ }
+ leaf global-vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR major threshold which will be used to trigger an alarm.";
+ }
+ list vswr-threshold-per-tx-array-element {
+ key "tx-array-name array-element";
+ description
+ "individual vswr-thresholds configuration which will be applied to each tx array element";
+ leaf tx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:tx-arrays/o-ran-uplane-conf:name";
+ require-instance false;
+ }
+ description
+ "tx-array where the configured vswr thresholds will be applied";
+ }
+ leaf array-element {
+ type uint16;
+ description
+ "the array-element number of the tx-array if there are multiple array-elements of the tx-array.";
+ }
+ leaf vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR minor threshold of the tx-array-element which will be used to trigger an alarm.
+ It shall override the configured global-vswr-minor-tresholds.";
+ }
+ leaf vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR major threshold of the tx-array-element which will be used to trigger an alarm.
+ It shall override the configured global-vswr-major-tresholds.";
+ }
+ leaf vswr-monitoring-trigger-power {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "Power threshold for enabling VSWR monitoring.
+ it shall override the configured global-vswr-monitoring-trigger-power.";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping laa-carrier-config {
+ description "Carrier Configuration for support of LAA. ";
+ leaf ed-threshold-pdsch {
+ type int8;
+ units dBm;
+ description
+ "This value indicates Energy Detection(ED) threshold for LBT for PDSCH and for measurements in dBm.";
+ }
+
+ leaf ed-threshold-drs {
+ type int8;
+ units dBm;
+ description
+ "This value indicates Energy Detection(ED) threshold for LBT for DRS in dBm.";
+ }
+
+ leaf tx-antenna-ports {
+ type uint8;
+ description
+ "This value indicates Tx antenna ports for DRS (1, 2, 4)";
+ }
+
+ leaf transmission-power-for-drs {
+ type int8;
+ units decibels;
+ description
+ "This value indicates offset of Cell specific reference Signal(CRS) power to reference signal power (dB).
+ DRS signal consists of CRS, PSS, SSS, and optionally CSI-RS.";
+ }
+
+ leaf dmtc-period {
+ type enumeration {
+ enum FORTY {
+ description
+ "40 ms";
+ }
+ enum EIGHTY {
+ description
+ "80 ms";
+ }
+ enum ONE-HUNDRED-SIXTY {
+ description
+ "160 ms";
+ }
+ }
+ units milliseconds;
+ description
+ "This value indicates DRS measurement timing configuration (DMTC) period in ms";
+ }
+
+ leaf dmtc-offset {
+ type uint8;
+ units subframes;
+ description
+ "This value indicates dmtc offset in Subframes.";
+ }
+
+ leaf lbt-timer {
+ type uint16;
+ units milliseconds;
+ description
+ "This value indicates LBT Timer in milliseconds.";
+ }
+
+ list max-cw-usage-counter {
+ when "/mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-self-configure = 'true'";
+ key "priority";
+ description "";
+ leaf priority {
+ type enumeration {
+ enum P1 {
+ description "priority 1";
+ }
+ enum P2 {
+ description "priority 2";
+ }
+ enum P3 {
+ description "priority 3";
+ }
+ enum P4 {
+ description "priority 4";
+ }
+ }
+ description "This value provides the priority class traffic for which the counter is calculated.";
+ }
+
+ leaf counter-value {
+ type uint8 {
+ range "1..8";
+ }
+ description "This value indicates the maximum value of counter
+ which shows how many max congestion window value is used for backoff
+ number of priority class traffic. This value is defined at 3GPP 36.213
+ section 15.1.3 as K.";
+ }
+ }
+ }
+
+ grouping coupling-methods {
+ description
+ "Grouping for configuration of desired C-Plane / U-Plane coupling methods (if supported)";
+ leaf coupling-to {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:coupling-methods/mcap:coupling-via-frequency-and-time";
+ require-instance false;
+ }
+
+ description
+ "RW instance of RO parameter.";
+ }
+ leaf coupling-method {
+ when "../coupling-to = 'true'";
+ type enumeration{
+ enum NORMAL {
+ description "Coupling via sectionId value. This value can be used always.";
+ }
+ enum FREQUENCY_AND_TIME {
+ description "Coupling via frequency and time. Can be used when coupling-via-frequency-and-time = true
+ or coupling-via-frequency-and-time-with-priorities = true in o-ran-module-cap.yang";
+ }
+ enum FREQUENCY_AND_TIME_WITH_PRIORITIES {
+ description "Coupling via frequency and time with priorities. Can be used when
+ coupling-via-frequency-and-time-with-priorities = true in o-ran-module-cap.yang";
+ }
+ enum FREQUENCY_AND_TIME_WITH_PRIORITIES_OPTIMIZED {
+ description "Coupling via frequency and time with priorities optimized. Can be used when
+ coupling-via-frequency-and-time-with-priorities-optimized = true in o-ran-module-cap.yang";
+ }
+ }
+ default NORMAL;
+ description
+ "Method of coupling between C-Plane and U-Plane messages; see methods of coupling
+ of C-Plane and U-Plane in CUS-Plane specification. If an O-RU doesn't support the
+ necessary capability as defined in o-ran-module-cap.yang, the O-RU shall respond
+ with rpc-error including an error-message describing the error condition";
+ }
+ }
+
+ 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:
+ * O_DU_Port_ID: Used to differentiate processing units at O-DU
+ * BandSector_ID: Aggregated cell identifier
+ * CC_ID: distinguishes Component Carriers
+ * RU_Port_ID: Used to differentiate spatial streams or beams on the O-RU
+
+ The bitwidth of each of the above fields is variable this model is supposed to check
+ if we are occupying bits continuously, but we do not have to occupy all 16 bits";
+
+
+ leaf o-du-port-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode O-DU 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 O-RU Port ID";
+ }
+
+ leaf eaxc-id {
+ type uint16;
+ mandatory true;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ grouping parameters {
+ description
+ "Grouping of all parameters common between UL and DL";
+
+ leaf name {
+ type string;
+ mandatory true;
+ description "Unique name of array antenna";
+ }
+
+ leaf number-of-rows {
+ type uint16;
+ mandatory true;
+ description "Number of rows array elements are shaped into - M";
+ }
+
+ leaf number-of-columns {
+ type uint16;
+ mandatory true;
+ description "Number of columns array elements are shaped into - N";
+ }
+
+ leaf number-of-array-layers {
+ type uint8;
+ mandatory true;
+ description "Number of array layers array elements are shaped into - Q";
+ }
+
+ leaf horizontal-spacing {
+ type decimal64 {
+ fraction-digits 5;
+ }
+ units Meter;
+
+ description "Average distance between centres of nearby AE in horizontal direction (in array coordinates system)";
+ }
+
+ leaf vertical-spacing{
+ type decimal64 {
+ fraction-digits 5;
+ }
+ units Meter;
+
+ description "Average distance between centres of nearby AE in vertical direction (in array coordinates system)";
+ }
+
+ container normal-vector-direction {
+ description
+ "Counter-clockwise rotation around z and y axis.";
+
+ leaf azimuth-angle{
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Degrees;
+
+ description "Azimuth angle, counter-clockwise rotation around z-axis. Value 'zero' points to broad-side, value '90' points to y-axis";
+ }
+ leaf zenith-angle{
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Degrees;
+
+ description "Zenith angle, counter-clockwise rotation around y-axis. Value 'zero' points to zenith, value '90' points to horizon";
+ }
+ }
+
+ container leftmost-bottom-array-element-position {
+ description "Structure describing position of leftmost, bottom array element.";
+ leaf x {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "X dimension of position of leftmost, bottom array element";
+ }
+
+ leaf y {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "Y dimension of position of leftmost, bottom array element";
+ }
+
+ leaf z {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "Z dimension of position of leftmost, bottom array element";
+ }
+ }
+ list polarisations {
+ key "p";
+ min-elements 1;
+ max-elements 2;
+
+ description
+ "List of supported polarisations.";
+
+ leaf p {
+ type uint8;
+ mandatory true;
+ description
+ "Polarisation index. See CUS-plane";
+ }
+
+ leaf polarisation {
+ type polarisation_type;
+ mandatory true;
+ description "Type of polarisation supported by array.";
+ }
+ }
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ mandatory true;
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multiband solutions.";
+ }
+
+ list related-o-ru-connectors {
+ key name;
+
+ leaf name {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR')";
+ description
+ "Referenced name of O-RU connector used by the antenna array.";
+ }
+ leaf-list array-element-id {
+ type uint16;
+ description
+ "Identifiers of array element(s) related to specific O-RU connector. Allowed values and semantic - as per CUS-Plane spec, clause 'Identification and Ordering of Array Elements'";
+ }
+ description
+ "List of unique names that identify instances of O-RU's connectors the external [tr]x-array is reachable through.";
+ }
+ }
+
+ grouping array-choice {
+ choice antenna-type {
+ case tx {
+ leaf tx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:tx-arrays/o-ran-uplane-conf:name";
+ }
+
+ description
+ "Leafref to tx array if such is chosen";
+ }
+ }
+ case rx {
+ leaf rx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:rx-arrays/o-ran-uplane-conf:name";
+ }
+
+ description
+ "Leafref to rx array if such is chosen";
+ }
+ }
+ description
+ "Choice for antenna type";
+ }
+ description
+ "Elements which groups choice for antenna type";
+ }
+
+ grouping scs-config {
+ description
+ "It groups all parameters related to SCS configuration";
+
+ leaf frame-structure {
+ type uint8;
+
+ description
+ "This parameter provides value of frame structure. For semantics and allowed values see CUS-Plane Specification, clause 'frameStructure (frame structure)'";
+ }
+
+ leaf cp-type {
+ type enumeration {
+ enum NORMAL {
+ description
+ "Normal cyclic prefix";
+ }
+
+ enum EXTENDED {
+ description
+ "Extended cyclic prefix";
+ }
+ }
+
+ description
+ "Provides type of CP (cyclic prefix).
+
+ For section type 3 or section type 0, element and the value of this leaf shall be ignored by the O-RU. In such circumstances,
+ please refer to clause 7.5.2.14 cpLength (cyclic prefix length) of the CUS-Plane Specification.";
+ }
+
+ leaf cp-length {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Provides length of CP used for the first symbol after subframe boundary or half-subframe boundary.
+ See CUS-plane
+
+ If a section type 3 is used in C-plane messages addressed to the endpoint, then O-RU takes length of CP from
+ C-Plane cpLength Information Element and the value of this leaf shall be ignored by the O-RU. See cpLength (cyclic prefix length)
+ in CUS-Plane for details.
+
+ If a static configuration (see static-prach-configurations) is applicable to the endpoint, then O-RU takes
+ length of CP from M-Plane cp-length leaf in static-prach-configurations and the value of this leaf shall be ignored by the O-RU.";
+ }
+
+ leaf cp-length-other {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Provides length of CP used for symbols other than provided by cp-length.
+
+ If a section type 3 is used in C-plane messages addressed to the endpoint, then O-RU takes length of CP from
+ C-Plane cpLength Information Element and the value of this leaf shall be ignored by the O-RU. See cpLength (cyclic prefix length)
+ in CUS-Plane for details.
+
+ If a static configuration (see static-prach-configurations) is applicable to the endpoint, then O-RU takes
+ length of CP from M-Plane cp-length leaf in static-prach-configurations and the value of this leaf shall be ignored by the O-RU.";
+ }
+
+ leaf offset-to-absolute-frequency-center {
+ type int32;
+ mandatory true;
+ description
+ "This provides value of freqOffset to be used if section type 3 is not used. See freqOffset in CUS-plane.
+ offset-to-absolute-frequency-center defines the relative spacing between the centre of RE#0 of RB#0 to the center-of-channel-bandwidth.
+ If offset-to-absolute-frequency-center for NR with SCS=15kHz is odd,
+ it implies that 7.5kHz shift as indicated by the 3GPP parameter frequencyShift7p5khz for UL is applied,
+ which means enable the NR UL transmission with a 7.5 kHz shift to the LTE raster, as defined in 3GPP TS 38.331.
+ When type (in tx/rx-array-carrier) is DSS, 'offset-to-absolute-frequency-center' indicates the 1st RE of 1st RB of NR.";
+ }
+
+ list number-of-prb-per-scs {
+ key scs;
+ description
+ "List of configured for each SCS that will be used.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.
+ Note: set of allowed values is restricted by SCS derived from values in supported-frame-structures.";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ mandatory true;
+ description
+ "Determines max number of PRBs that will be used in all sections per one symbol.
+ This is affecting allocation of resources to endpoint. Value shall not exceed constrains
+ defined by max-prb-per-symbol of endpoint type. In addition, sum (over all used endpoints
+ within a group of endpoints sharing resources) of number-of-prb rounded up to the
+ nearest value from prb-capacity-allocation-granularity shall not exceed max-prb-per-symbol of the group.";
+ }
+ }
+ }
+
+ grouping occupied-bandwidth {
+ description
+ "Grouping describing occupied bandwidth of a carrier.";
+
+ container occupied-bandwidth {
+ description
+ "Container describing occupied bandwidth of a carrier.
+
+ Information conveyed in this container can be used to determine minimum filter bandwidth in case
+ it cannot be fully determined basing on the carrier bandwidth itself e.g., when NB-IoT carriers
+ are allocated in the carrier's guard band.";
+
+ leaf lower-bound {
+ type uint64;
+ units Hz;
+
+ description
+ "Lower bound of the filter pass bandwidth of a carrier.";
+ }
+
+ leaf upper-bound {
+ type uint64;
+ units Hz;
+
+ description
+ "Upper bound of the filter pass bandwidth of a carrier.";
+ }
+ }
+ }
+
+ grouping tx-common-array-carrier-elements {
+ description
+ "This grouping contains all common parameters for tx-array-carriers and rx-array-carriers";
+
+ leaf absolute-frequency-center {
+ type uint32;
+ status deprecated;
+ description
+ "deprecated in version 5.0.0 and replaced with offset-to-absolute-frequency-center
+ and common FREF translated from absolute-frequency-center (NREF) as defined in 38.104";
+ }
+
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Centre frequency of channel bandwidth in Hz. Common for all numerologies.
+ center-of-channel-bandwidth is the FREF translated from absolute-frequency-center (NREF) as per 3GPP TS 38.104.
+ Refer to Table 5: Centre Bandwidth Calculation in M-plane spec for calculation of this parameter
+ for even and odd number of PRBs in LTE, NR and DSS carrier configuration.";
+ }
+
+ 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 array carriers. Note that NETCONF server uses state parameter
+ to indicate actual state of array carriers operation. When 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
+ "array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Indicates state of array carriers activation operation";
+ }
+
+ leaf-list availability-status {
+ type o-ran-cmn:availability-status;
+ config false;
+ description
+ "indicates availability-status of array carrier";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ config false;
+
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+ leaf rw-duplex-scheme {
+ type leafref {
+ path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/duplex-scheme";
+ require-instance false;
+ }
+ status deprecated;
+ description
+ "Config true type of duplex scheme.
+ Status is deprecated because 'lte-tdd-frame' container, where it was used, is also deprecated.
+ Additionally duplex-scheme is derived from the band-number.";
+ }
+ leaf rw-type {
+ type leafref {
+ path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/type";
+ require-instance false;
+ }
+ status deprecated;
+ description
+ "Config true type of carrier.
+ Status is deprecated because leafref is to a 'config true' schema-node";
+ }
+ uses occupied-bandwidth;
+
+ leaf configured-tx-beamId-table-index {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint8;
+ description
+ "The value of beamId table index configured to be used by the O-DU for a given tx-array-carrier.
+ The value shall be chosen from the list 'tx-array-beamId-table-indexes' advertised by the O-RU.";
+ }
+ }
+
+ grouping rx-common-array-carrier-elements {
+ description
+ "This grouping contains all common parameters for tx-array-carriers and rx-array-carriers";
+
+ leaf absolute-frequency-center {
+ type uint32;
+ status deprecated;
+ description
+ "deprecated in version 5.0.0 and replaced with offset-to-absolute-frequency-center
+ and common FREF translated from absolute-frequency-center (NREF) as defined in 38.104";
+ }
+
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Centre frequency of channel bandwidth in Hz. Common for all numerologies.
+ center-of-channel-bandwidth is the FREF translated from absolute-frequency-center (NREF) as per 3GPP TS 38.104.
+ Refer to Table 15.2.4-1: Centre Bandwidth Calculation in M-plane spec for calculation of this parameter
+ for even and odd number of PRBs in LTE, NR and DSS carrier configuration.";
+ }
+
+ 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 array carriers. Note that NETCONF server uses state parameter
+ to indicate actual state of array carriers operation. When 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
+ "array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Indicates state of array carriers activation operation";
+ }
+
+ leaf-list availability-status {
+ type o-ran-cmn:availability-status;
+ config false;
+ description
+ "indicates availability-status of array carrier";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ config false;
+
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+ uses occupied-bandwidth;
+
+ leaf configured-rx-beamId-table-index {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint8;
+ description
+ "The value of beamId table index configured to be used by the O-DU for a given rx-array-carrier.
+ The value shall be chosen from list 'rx-array-beamId-table-indexes' advertised by the O-RU.";
+ }
+ }
+
+ grouping endpoint-section-capacity {
+ leaf max-control-sections-per-data-section {
+ type uint8 {
+ range "1..12";
+ }
+ description
+ "Max number of C-plane sections (C-plane section is part of C-plane message that carries 'section fields')
+ referring to same U-plane section (U-plane section is part of U-plane message that carries
+ 'section header fields' and 'PRB fields') that is supported by endpoint.
+ Note that additional limitations specific for each section type apply on top of this number.";
+ }
+ leaf max-sections-per-symbol {
+ type uint16;
+ description
+ "Max number of sections within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+ leaf max-sections-per-slot {
+ type uint16;
+ description
+ "Max number of sections within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.";
+ }
+ leaf max-highest-priority-sections-per-slot {
+ type uint16;
+ must "current() < ../max-sections-per-slot" {
+ error-message "the sectionID for the highest priority needs to be less than the max sectionIds per slot";
+ }
+ description
+ "Max number of highest priority sections within one slot that can be processed by endpoint or processed collectively by
+ group of endpoints sharing capacity. This leaf applies only when coupling-via-frequency-and-time-with-priorities-optimized
+ is true, in other instances this leaf is ignored by the O-RU. The sectionId for highest priority section descriptions shall
+ start from 0 to specified max value and is a subset of max-sections-per-slot and must be less than max-sections-per-slot.";
+ }
+
+ leaf max-remasks-per-section-id {
+ type uint8 {
+ range "1..12";
+ }
+ default 12;
+ status deprecated;
+ description
+ "maximum number of different reMask values that is applied to a PRB
+ within one section id. This value can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ This parameter is duplicated max-control-sections-per-data-section, hence being deprecated.";
+ }
+ leaf max-uplane-section-header-per-symbol {
+ type uint16;
+ description
+ "Maximum number of U-Plane data section header within one symbol that can be processed by an endpoint or processed collectively by group of
+ endpoints sharing capacity. Clarification for multiple U-Plane data section headers per C-Plane section description is specified in sectionId IE
+ description in CUS-Plane specification. For the cases where this optional parameter is not populated by O-RU or an older version O-DU does not
+ interpret this parameter, O-DU may optionally use max-sections-per-symbol as the default value to limit of U-Plane data section messages which
+ can be processed by the O-RU. If none of the above limitations are supported, O-RU and O-DU may rely on offline negotiation.
+ As an example, this parameter can be used to limit O-RU processing while using Section extension type#6 and #12, which are used for non-contiguous
+ PRB allocation, and hence results in multiple U-Plane data section headers for a given C-Plane section description.";
+ }
+ leaf max-uplane-section-header-per-slot {
+ type uint16;
+ description
+ "Maximum number of U-Plane data section headers within one slot that can be processed by an endpoint or processed collectively by group of
+ endpoints sharing capacity. Clarification for multiple U-Plane data section headers per C-Plane section description is specified in sectionId IE
+ description in CUS-Plane specification. For the cases where this optional parameter is not populated by O-RU or an older version O-DU does not
+ interpret this parameter, O-DU may optionally use max-sections-per-slot as the default value to limit of U-Plane data section messages which can
+ be processed by the O-RU. If none of the above limitations are supported, O-RU and O-DU may rely on offline negotiation.
+ As an example, this parameter can be used to limit O-RU processing while using Section extension type#6 and #12, which are used for non-contiguous
+ PRB allocation, and hence results in multiple U-Plane data section headers for a given C-Plane section description.";
+ }
+
+ description
+ "Parameters describing section capacity where section is understood as number of different sectionId values. Additionally, max limits for U-Plane data sections
+ refer to U-Plane data section headers";
+ }
+
+ grouping endpoint-section-extension-limits {
+ leaf max-mcscaleremask-per-prb {
+ type uint16;
+ description
+ "This parameter limits the number of sets of {mcScaleReMask, csf, mcScaleOffset} values per symPrbPattern the O-RU can support when SE 23 is used in a
+ data section description. Refer to clause 7.7.23.1 of the CUS-Plane specification.";
+ }
+ leaf max-prb-ranges-per-sec-ext-12 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 12 and specifies
+ the maximum number of frequency ranges R per section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with
+ 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency ranges in SE-12 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency ranges per section description used in SE-12</proposed-repair-actions>";
+ }
+ leaf max-freq-hops-per-sec-ext-13 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 13 and specifies
+ the maximum number of frequency hops R per section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with
+ 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency hops in SE 13 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency hops per section description used in SE-13</proposed-repair-actions>";
+ }
+
+ leaf max-prb-blks-per-sec-ext-23 {
+ if-feature feat:SE23-PRB-BLOCK-MODE-SUPPORT;
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 23 and specifies
+ the maximum number of prb blocks (Refer Clause 7.7.23.1 of CUS-Plane spec prb block) per
+ section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with 'fault-id = 31'
+ to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of prb blocks in SE-23 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce prb blocks per section description used in SE-23</proposed-repair-actions>";
+ }
+
+ description
+ "Parameters describing C-Plane section extension limits/capacities.";
+ }
+
+ grouping endpoint-beam-capacity {
+ leaf max-beams-per-symbol {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of different beamId values within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.
+
+ The parameter doesn't apply if multiple-beamId-tables-support-enabled is set to true.
+ In such a case, max-beams-per-symbol-multiple-beamid-tables applies.";
+ }
+ leaf max-beams-per-slot {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of different beamId values within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.
+
+ The parameter doesn't apply if multiple-beamId-tables-support-enabled is set to true.
+ In such a case, max-beams-per-slot-multiple-beamid-tables applies.";
+ }
+ leaf max-beams-per-symbol-multiple-beamid-tables {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint32;
+ description
+ "Max number of different beamId values within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ beamId values associated with different beamId tables are always considered different.
+
+ This parameter only applies if multiple-beamId-tables-support-enabled is set to true.
+ If multiple-beamId-tables-support-enabled is set to false, then max-beams-per-symbol applies.";
+ }
+ leaf max-beams-per-slot-multiple-beamid-tables {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint32;
+ description
+ "Max number of different beamId values within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ beamId values associated with different beamId tables are always considered different.
+
+ This parameter only applies if multiple-beamId-tables-support-enabled is set to true.
+ If multiple-beamId-tables-support-enabled is set to false, then max-beams-per-slot applies.";
+ }
+ leaf max-beam-updates-per-slot {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of beams within one slot that can be updated by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.";
+ }
+ leaf max-beam-updates-per-symbol {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of beams within one symbol that can be updated by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.";
+ }
+
+ description
+ "Parameters describing beam capacity where number of beams is understood as number of different beamId values.
+ Parameters defined for beam updates shall be used to put a maximum limit on number of beam/beamIds which can be updated
+ every slot/symbol. Note: This parameter does not put any restriction on which beams/beamIds can be updated.
+
+ If the parameters defining beam capacity and beam updates are absent or if value 0 is reported for the parameters
+ defining beam capacity and beam updates, then the endpoint does not support beamforming operation.";
+ }
+
+ grouping endpoint-prb-capacity {
+ leaf max-prb-per-symbol {
+ type uint16;
+ description
+ "Max number of prbs within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+
+ leaf max-prb-ranges-per-symbol {
+ type uint32;
+ description
+ "Optional parameter reported by O-RU which indicates the maximum number of PRB ranges
+ that can be processed by single endpoint or processed collectively by group of endpoints
+ sharing capacity within one symbol. For details please see O-RAN WG4 CUS-Plane specification,
+ Clause 7.8.2.1.2 'Limits of number of PRB ranges'.
+
+ In case CU-Plane traffic generated by the O-DU exceeds the limit, an O-RU is responsible
+ for sending alarm notification with 'fault-id = 31' to subscribers following the procedures
+ defined in Clause 11 and Table A.1-1 of O-RAN.WG4.MP.0.
+
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notif message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>max-prb-ranges-per-symbol exceeded</probable-cause>
+ <proposed-repair-actions>Reduce value of number of PRB ranges used per symbol</proposed-repair-actions>";
+ }
+
+ description
+ "Attributes presenting processing capacity related to PRB.";
+ }
+
+ grouping endpoint-numerology-capacity {
+ leaf max-numerologies-per-symbol {
+ type uint16;
+ description
+ "Max number of numerologies within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+
+ description
+ "Attributes presenting processing capacity related to numerology.
+
+ This leaf contains valid data only when multiple-numerology-supported
+ is set to true.";
+ }
+
+ grouping per-cplane-message-limits {
+ leaf max-beams-per-cplane-message {
+ type uint16;
+ description
+ "Maximum number of beams which can be received in one single C-Plane message. Number of beams,
+ may include only beamIds, only beam weights or mix of beamIds and beamweights being received by
+ an O-RU in a single C-Plane message.
+ To avoid application layer fragmentation of C-Plane message across the fronthaul, O-RU should
+ avoid setting this to a very low value.
+ As a usage scenario, an O-RU may choose to define only a few quantized values e.g. (128, 256).
+ If the value is set to 0 by O-RU, the O-DU need not restrict the number of beams it can send
+ in single C-Plane message (except limited by MTU size).";
+ }
+
+ leaf max-highest-priority-sec-per-cplane-message {
+ type uint16;
+ description
+ "Maximum number of highest priority sections which can be received in one single C-Plane message.
+ This leaf applies only when 'coupling-via-frequency-and-time-with-priorities' is true";
+ }
+
+ leaf max-beams-per-slot-with-cplane-limits {
+ type uint16;
+ description
+ "Maximum number of beams that are required to be processed by endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables C-Plane limits. This value should replace
+ 'max-beams-per-slot' defined in 'endpoint-beam-capacity'";
+ }
+
+ leaf max-highest-priority-sections-per-slot-with-cplane-limits {
+ type uint16;
+ description
+ "Maximum number of highest priority sections that are required to be processed by endpoint or processed
+ collectively by group of endpoints sharing capacity when O-DU supports C-Plane limits. This value should
+ replace 'max-highest-priority-sections-per-slot' defined in 'endpoint-section-capacity'";
+ }
+
+ leaf max-num-se22-per-cplane-message {
+ type uint16;
+ description
+ "This value limits the max number of section extension 22 (ACK/NACK request) included in a C-Plane message as supported
+ by the endpoint or collectively by group of endpoints sharing capacity when O-DU enables C-Plane limits
+ and when section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint or endpoint sharing group.";
+ }
+
+ leaf max-prb-ranges-per-hp-section-sec-ext-12 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 12 and specifies the
+ maximum number of frequency ranges R per highest priority section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU is responsible for sending alarm notification
+ with 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency hops per highest priority section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency range per highest section description</proposed-repair-actions>";
+ }
+
+ description
+ "Attributes limit maximum instances of certain parameters contained in a C-Plane message e.g. beams,
+ highest priority sections. This limitation is useful for O-RUs which are packet processing based and are
+ dimensioned to handle fixed number of parameters contained in a C-Plane message. In addition, if O-DU supports
+ cplane limits, O-RU can operate more efficiently and endpoint capacity for applicable parameters are enhanced.
+ as specified by 'max-beams-per-slot-with-cplane-limits' and 'max-highest-priority-sections-per-slot-with-cplane-limits'";
+ }
+
+
+ grouping per-uplane-message-limits {
+ leaf max-section-headers-per-uplane-message {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type uint16;
+ description
+ "Maximum number of section headers which can be received in one single U-Plane message.";
+ }
+
+ description
+ "Attributes describe maximum instances of certian parameters contained in a U-Plane mesaage e.g.
+ number of section headers. Those limitations are required for O-RUs which are packet processing based and are
+ dimensioned to handle limited number of parameters contained in a U-Plane message. ";
+ }
+
+ grouping beam-update-contention-control-limits {
+ leaf max-beams-per-symbol-with-beam-contention-control {
+ type uint16;
+ description
+ "Maximum number of beams within one symbol that can be processed by an endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables the O-RU feature BEAM-UPDATE-CONTENTION-CONTROL.
+ This value should replace 'max-beams-per-symbol' defined in 'endpoint-beam-capacity'";
+ }
+
+ leaf max-beams-updates-per-symbol-with-beam-contention-control {
+ type uint16;
+ description
+ "Maximum number of beams within one symbol that can be updated by an endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables the O-RU feature BEAM-UPDATE-CONTENTION-CONTROL.
+ This value should replace 'max-beam-updates-per-symbol' defined in 'endpoint-beam-capacity'";
+ }
+
+ description
+ "If O-DU supports BEAM-UPDATE-CONTENTION-CONTROL, O-RU can operate more efficiently and endpoint capacity for applicable
+ parameters are enhanced.";
+ }
+
+ grouping endpoint-static-config-support {
+ leaf static-config-supported {
+ type enumeration {
+ enum NONE {
+ description
+ "The endpoint does not support static PRACH / SRS configuration.
+ Reception of PRACH / SRS is possible through real time C-Plane messages
+ if other endpoint capabilities allow for that.";
+ }
+ enum PRACH {
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ description
+ "The endpoint supports statically configured PRACH reception";
+ }
+ enum SRS {
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ description
+ "The endpoint supports statically configured SRS reception";
+ }
+ }
+ default NONE;
+
+ description
+ "The parameter informs if endpoint can be statically configured to process PRACH or SRS reception";
+ }
+
+ leaf max-prach-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ type uint8;
+ description
+ "Maximum number of PRACH patterns the endpoint can handle in PRACH configuration.
+ Due to limited range of the parameter, an O-DU should use extended-max-prach-patterns parameter.";
+ }
+
+ leaf extended-max-prach-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ if-feature feat:EXTENDED-PRACH-CONFIGURATION;
+ type uint32;
+ description
+ "Maximum number of PRACH patterns the endpoint can handle in PRACH configuration if EXTENDED-STATIC-PRACH is supported.";
+ }
+
+ leaf max-srs-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'SRS')";
+ type uint8;
+ description
+ "Maximum number of SRS patterns the endpoint can handle in SRS configuration";
+ }
+
+ description
+ "Endpoint's capabilities related to static PRACH / SRS configuration.";
+ }
+
+ grouping endpoint-tdd-pattern-support {
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type boolean;
+ default false;
+
+ description
+ "The parameter informs if endpoint supports configuration for TDD pattern";
+ }
+
+ leaf tdd-group {
+ type uint8;
+ description
+ "Parameter is used to group static-low-level-[tr]x-endpoints.
+ Note: [tr]x-array-carriers using static-low-level-[tr]x-endpoints
+ having the same value of tdd-group, must have the same TDD switching
+ points and the same directions to the air interface granted - regardless TDD switching
+ is controlled by M-Plane or by C-Plane";
+ }
+
+ description
+ "This grouping exposes static-low-level-[tr]x-endpoint's capabilities related to its support for configurable
+ TDD patterns and limitations regarding common TDD switching per groups of endpoints.";
+ }
+
+ grouping u-plane-transmission-control {
+ description
+ "Configuration for UL U-plane transmission control";
+
+ leaf transmission-window-control {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ type enumeration {
+ enum NONE {
+ description
+ "O-RU will use normal transmission type with normal transmission window";
+ }
+ enum STATIC {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ description
+ "O-RU will use transmission window offset and size and transmission type as configured over M-plane";
+ }
+ enum DYNAMIC {
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ description
+ "O-RU will use transmission window offset and size and transmission type as requested over C-plane";
+ }
+ }
+ default NONE;
+
+ description
+ "Selects type of UL U-plane transmission window control for the endpoint";
+ }
+
+ leaf transmission-window-schedule {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type union {
+ type empty;
+ type leafref {
+ path "/user-plane-configuration/transmission-window-schedules/id";
+ }
+ }
+ description
+ "Identifies U-plane transmission window schedule (which provides a list of symbol-specific offsets)
+ to be used by the endpoint.
+ Symbol-specific offset values from the schedule are added to endpoint specific offset value
+ from transmission-window-offset.
+ If this element is not present, the O-RU assumes as all symbol specific offsets are zero.
+ For restrictions on values of symbol-specific offsets see description of transmission-window-offset.
+ This parameter shall not be set to value other than empty if transmission control is not enabled
+ by transmission-window-control.";
+ }
+
+ leaf transmission-window-offset {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type uint16;
+ units "number of symbols";
+ default 0;
+ description
+ "Transmission window offset.
+ The effective symbol-specific offset is sum of endpoint-specific offset value from transmission-window-offset
+ and symbol-specific offset from transmission-window-schedules referenced by transmission-window-schedule.
+
+ If this element is not present then O-RU assumes transmission-window-offset is zero.
+ This parameter shall not be set to value other than 0 if transmission control is not enabled
+ by transmission-window-control.
+
+ There is no direct upper bound for this parameter (except value range defined by leaf type) but there are
+ restrictions on combination of values of transmission-window-offset, transmission-window-offset,
+ symbol-specific offset from transmission-window-schedules and transmission-window-size.
+
+ Specifically, if endpoint is set for delay managed operation (non-time-managed-delay-enabled = FALSE)
+ then O-RU handles U-Plane transmission as delay managed traffic and combination of values of
+ transmission-window-offset, symbol-specific offset from transmission-window-schedules and
+ transmission-window-size must not exceed O-RU buffering capacity (transmission-buffering-capacity)
+ for the requested reception schedule.
+
+ If endpoint is set for non-delay managed operation (non-time-managed-delay-enabled = TRUE)
+ then O-RU handles U-Plane transmission on best effort basis. In this case any combination of values
+ of transmission-window-offset, symbol-specific offset from transmission-window-schedules and
+ transmission-window-size is permitted. This does not remove restrictions on parameters due to restrictions
+ defined for value type or restrictions that depend on INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature
+
+ Additional restrictions on values (and presence) of transmission-window-schedule, transmission-window-offset
+ and transmission-window-size depend on presence of INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is not supported then all endpoints with
+ transmission control enabled that handle the same carrier type and SCS must be configured
+ (via M-plane or C-plane) with parameter values resulting in transmission windows that coincide
+ between the endpoints. That is, for every symbol N, the effective transmission window for symbol N
+ must be shared (start at the same time and end at the same time) by all the endpoints handling
+ same carrier type and SCS. This restriction applies only to endpoints that have transmission
+ control enabled.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is supported then restriction described
+ above does not apply and a different transmission window (window offset and window size)
+ can be used for every endpoint capable of transmission window control.";
+ }
+
+ leaf transmission-window-size {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type uint16 {
+ range "0..10000";
+ }
+ units "microsecond";
+ default 0;
+ description
+ "Transmission window size to be used; only values that are compatible with SCS used
+ for the endpoint are allowed.
+ Minimum supported value is determined by SCS specific transmission window size
+ reported by O-RU in ru-delay-profile.
+
+ Client can use special value 0 (zero) instead of the SCS specific transmission window
+ size reported by O-RU in ru-delay-profile with the same effect.
+ This parameter shall not be set to value other than 0 if transmission control is not enabled
+ (transmission-window-control = NONE) or the endpoint is set for non-delay managed operation
+ (non-time-managed-delay-enabled = TRUE).
+
+ There is no direct upper bound for this parameter (except value range defined by leaf type) but there are
+ restrictions on combination of values of transmission-window-offset, transmission-window-offset,
+ symbol-specific offset from transmission-window-schedules and transmission-window-size.
+ See description of transmission-window-offset for more details.";
+ }
+
+ leaf transmission-type {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type enumeration {
+ enum NORMAL {
+ description
+ "Normal transmission (unspecified within transmission window)";
+ }
+ enum UNIFORMLY-DISTRIBUTED {
+ if-feature feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION;
+ description
+ "Uniformly distributed over transmission window: each of N messages in the window
+ transmitted at random time in a separate subwindow; subwindow size is window size / N ";
+ }
+ }
+
+ description "Type of delay supported by the endpoint";
+ }
+ }
+
+ grouping tx-endpoint-compression-grouping {
+ description
+ "Grouping for endpoint compression";
+
+ container compression {
+ presence
+ "This container shall exists to avoid misaligned compression
+ methods between devices";
+
+ description
+ "Container which consists of global configurable parameters for compression";
+
+ uses cf:compression-details;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ list dynamic-compression-configuration {
+ when "../compression-type = 'DYNAMIC'";
+ key "id";
+ unique "compression-method iq-bitwidth fs-offset";
+ description
+ "List of possible configuration in case dynamic configuration is used
+ Note: In case of empty list all available compressions can be chosen dynamically
+ and default fs-offset is taken (0).
+ If the feature CONFIGURABLE-FS-OFFSET is not supported,
+ fs-offset will not be considered as one of the criteria for unique statement.
+ Refer to RFC7950 clause 7.8.3 for details of unique statement";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular compression";
+ }
+
+ uses cf:compression-method-grouping;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ leaf channel-information-iq-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ status deprecated;
+ description
+ "I/Q bitwidth for channel information in Section Type6.
+ Leaf is deprecated as it should be independent of dynamic compression,
+ NETCONF client instead uses channel-information-bitwidth schema node";
+ }
+ }
+
+ leaf channel-information-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ description
+ "I/Q bitwidth for channel information in Section Type6.
+ Maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively.
+ Note: This parameter shall be used when the NETCONF client does not make use of
+ the CHANNEL-INFORMATION-COMPRESSION feature.";
+ }
+
+ list channel-information-compressions {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular channel information compression";
+ }
+
+ leaf channel-information-compression-method {
+ type cf:ci-compression-method-def;
+ description
+ "Channel information compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ description
+ "Bitwidth to be used in compression, maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively.
+
+ When this schema node is used in the configuration, the O-RU shall ignore the configuration of the
+ /low-level-tx-endpoints/compression/channel-information-bitwidth schema node";
+ }
+
+ description
+ "List of available compressions, that can be dynamically chosen, for channel information (e.g. ST6) for this endpoint.
+ Note1: When only one compression is listed here, it implies that channel information compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+
+ list bf-weights-compressions {
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular beamforming compression";
+ }
+
+ leaf bf-weights-compression {
+ type cf:bf-compression-method-def;
+ description
+ "Beamforming weight compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8 {
+ range "1..16";
+ }
+ description
+ "Bitwidth to be used in compression, maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively";
+ }
+ description
+ "List of available compressions, that can be dynamically chosen, for beamforming weights for this endpoint.
+ Note1: When only one compression is listed here, it implies that beamforming weights compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+ }
+ }
+
+ grouping rx-endpoint-compression-grouping {
+ description
+ "Grouping for endpoint compression";
+
+ container compression {
+ presence
+ "This container shall exists to avoid misaligned compression
+ methods between devices";
+
+ description
+ "Container which consists of global configurable parameters for compression";
+
+ uses cf:compression-details;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ list dynamic-compression-configuration {
+ when "../compression-type = 'DYNAMIC'";
+ key "id";
+ unique "compression-method iq-bitwidth fs-offset";
+ description
+ "List of possible configuration in case dynamic configuration is used
+ Note: In case of empty list all available compressions can be chosen dynamically
+ and default fs-offset is taken (0).
+ If the feature CONFIGURABLE-FS-OFFSET is not supported,
+ fs-offset will not be considered as one of the criteria for unique statement.
+ Refer to RFC7950 clause 7.8.3 for details of unique statement";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular compression";
+ }
+
+ uses cf:compression-method-grouping;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+ }
+
+ list bf-weights-compressions {
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular beamforming compression";
+ }
+
+ leaf bf-weights-compression {
+ type cf:bf-compression-method-def;
+ description
+ "Beamforming weight compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ description
+ "List of available compressions, that can be dynamically chosen, for beamforming weights for this endpoint.
+ Note1: When only one compression is listed here, it implies that beamforming weights compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+ }
+ }
+
+ grouping supported-section-type4-config {
+ description
+ "Set of parameters required for section type 4 slot configuration message.";
+ list st4-supported-commands {
+ key "st4-command-type";
+
+ description
+ "This parameter specifies the list of Section Type 4 command types supported by O-RU.";
+ leaf st4-command-type {
+ type enumeration {
+ enum TIME_DOMAIN_BEAM_CONFIG {
+ description "O-RU support for receiving time domain beamforming command.";
+ }
+ enum TDD_CONFIG_PATTERN {
+ description "O-RU support for receiving TDD symbol pattern for a given slot.";
+ }
+ enum TRX_CONTROL {
+ if-feature feat:TRX-CONTROL;
+ description "O-RU support for receiving TRX CONTROL command in a given slot.";
+ }
+ enum ASM {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description "O-RU support for receiving ASM command in a given slot.";
+ }
+ }
+ description
+ "Section Type 4 command types supported by O-RU.";
+ }
+
+ list st4-command-scope-params {
+ key "cmd-scope";
+
+ description
+ "This list contains parameters which are specific to a given command scope associated with a particular section type 4 command type.";
+
+ leaf cmd-scope {
+ type enumeration {
+ enum ARRAY-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array(s) and/or rx-array(s).If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, to the
+ endpoints assigned to the O-DU which was the originator of the command.";
+ }
+ enum CARRIER-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array-carrier and/or rx-array-carrier.";
+ }
+ enum O-RU-COMMAND {
+ description
+ "O-RU level command, i.e., one that applies to all arrays and carriers. If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, as
+ specified in CUS-Plane specification, clause 7.5.2.17.";
+ }
+ }
+ description "Command scope for section type 4 commands";
+ }
+
+ leaf st4-reception-bitmask {
+ type uint16;
+ description
+ "This parameter specifies the O-RU capability to receive Section Type 4 message with associated commands with a particular command scope
+ for the symbols for which the corresponding bit is set to '1' in the bitmask. If the O-RU receives a Section Type 4 message with
+ associated command for a symbol whose bit value is set to '0' in this bitmask, the O-RU shall reject the Section Type 4 message";
+ }
+ }
+ }
+
+ list st4-reception-mask {
+ key "cmd-scope";
+ status deprecated;
+
+ description
+ "List of symbol mask per command scope, specifying the O-RU capability to receive Section Type 4 message for a
+ given command scope only for symbols for which the corresponding bit is set to '1' in the bitmask. If the O-RU
+ receives a Section Type 4 message with associated command for a symbol whose bit value is set to '0' in this
+ bitmask, the O-RU shall reject the Section Type 4 message";
+
+ leaf cmd-scope {
+ type enumeration {
+ enum ARRAY-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array(s) and/or rx-array(s).If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, to the
+ endpoints assigned to the O-DU which was the originator of the command.";
+ }
+ enum CARRIER-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array-carrier and/or rx-array-carrier.";
+ }
+ enum O-RU-COMMAND {
+ description
+ "O-RU level command, i.e., one that applies to all arrays and carriers. If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, as
+ specified in CUS-Plane specification, clause 7.5.2.17.";
+ }
+ }
+ description "Command scope for section type 4 commands";
+ }
+
+ leaf st4-reception-bitmask {
+ type uint16;
+ description
+ "This parameter specifies the O-RU capability to receive Section Type 4 message with associated commands for the symbols
+ for which the corresponding bit is set to '1' in the bitmask. If the O-RU receives a Section Type 4 message with
+ associated command for a symbol whose bit value is set to '0' in this bitmask, the O-RU shall reject the Section Type 4 message";
+ }
+ }
+ }
+
+ grouping uplane-conf-group {
+ description
+ "Grouping for uplane configuration related parameters";
+
+ 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 sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-tx-link
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by low-level-tx-link,
+ if 'transport-qualified-processing-element' is included in the configuration,
+ the O-RU shall use 'transport-qualified-processing-element' instead of this schema node,
+ an O-RU Controller shall still configure this schema node with a leafref to a valid ru-element,
+ but this shall not be used by the O-RU.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element'";
+ }
+
+ leaf transport-qualified-processing-element {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "Contains name of processing-element to be used as transport by low-level-tx-link.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 leafref {
+ path "/user-plane-configuration/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";
+ }
+ }
+
+ 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 sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-rx-link
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by low-level-rx-link,
+ if 'transport-qualified-processing-element' is included in the configuration,
+ the O-RU shall use 'transport-qualified-processing-element' instead of this schema node,
+ an O-RU Controller shall still configure this schema node with a leafref to a valid ru-element,
+ but this shall not be used by the O-RU.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element'";
+ }
+
+ leaf transport-qualified-processing-element {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "Contains name of processing-element to be used as transport by low-level-rx-link.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 leafref {
+ path "/user-plane-configuration/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";
+ }
+
+ leaf user-plane-uplink-marking {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:enhanced-uplane-mapping/o-ran-pe:uplane-mapping/o-ran-pe:up-marking-name";
+ }
+ description
+ "Parameter to set the non-default marking for user-plane";
+ }
+
+ leaf enhanced-user-plane-uplink-marking {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:enhanced-uplane-mapping/o-ran-pe:uplane-mapping/o-ran-pe:up-marking-name";
+ }
+ description
+ "Parameter to set the non-default marking for user-plane.
+ Used when the enhanced-uplane-mapping is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+ }
+
+ grouping common-se24-dmrs-capabilities-grp {
+ description
+ "Grouping of common SE23 DMRS BF capabilities.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ leaf max-user-groups-per-slot {
+ type uint32;
+ description
+ "Maximum number user groups per slot.";
+ }
+
+ leaf max-entries-per-slot {
+ type uint32;
+ description
+ "Maximum number of entries in the table of DMRS configurations per slot.";
+ }
+ }
+
+ list endpoint-types {
+ key "id";
+ config false;
+ description
+ "Properties of endpoint that are common to multiple endpoints if such are identified
+ Note: For any endpoint supporting mixed numerology within slot/symbol (multiple-numerology-supported=TRUE)
+ * Interval specific (per-slot and per-symbol) capacity constraints instantaneous capacity usage
+ (i.e. capacity is shared/distributed between all numerologies used at an instant of time).
+ * Instantaneous capacity usage is the sum of capacity usages of all intervals of a specific type (slot/symbol)
+ that share the instant of time at which instantaneous capacity usage is evaluated regardless of numerology.
+ * Capacity used in an interval is allocated at the start of the interval and is released at the end of the interval
+ (e.g. capacity used for symbol #N of numerology #M is unavailable during symbol #N and available for reuse after symbol #N ends).";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies type of endpoints sharing same properties. Values shall start with 0 and shall be allocated without gaps.";
+ }
+
+ list supported-section-types {
+ key "section-type";
+ description
+ "Indicates section types and extensions endpoints of this type support";
+
+ leaf section-type {
+ type uint8;
+
+ description
+ "This parameter determines the characteristics of U-plane data to be transferred or received from a beam with one pattern id.";
+ }
+
+ leaf-list supported-section-extensions {
+ type uint8;
+
+ description
+ "This parameter provides the extension types supported by the O-RU
+ which provides additional parameters specific to the subject data extension";
+ }
+ }
+
+ uses supported-section-type4-config {
+ if-feature feat:ST4-SLOT-CONFIG-MSG-SUPPORT;
+ }
+
+ leaf-list supported-frame-structures {
+ type uint8;
+
+ description
+ "List of supported values of frame structure. For semantic and allowed values see CUS-Plane Specification, clause '7.5.2.13 frameStructure (frame structure)'";
+ }
+
+ leaf managed-delay-support {
+ type enumeration {
+ enum MANAGED {
+ description
+ "Time managed delays are supported";
+ }
+
+ enum NON_MANAGED {
+ description
+ "Non time managed delays are supported";
+ }
+
+ enum BOTH {
+ description
+ "Both time managed and non time managed delays are supported";
+ }
+ }
+
+ description
+ "Type of delay supported by the endpoint";
+ }
+
+ leaf multiple-numerology-supported {
+ type boolean;
+ default true;
+ description
+ "Indicates whether the endpoint type supports multiple numerologies";
+ }
+
+ leaf max-numerology-change-duration {
+ type uint16 {
+ range "0..10000";
+ }
+
+ units Ts;
+ description
+ "Maximum gap of endpoint operation that will be caused by changing of
+ numerology.
+
+ This time is required for reconfiguration and flushing of pipes.
+
+ This leaf contains valid data only when multiple-numerology-supported
+ is set to true.";
+ }
+
+ uses endpoint-section-capacity;
+ uses endpoint-beam-capacity;
+ uses endpoint-prb-capacity;
+ uses endpoint-section-extension-limits;
+
+ leaf-list prb-capacity-allocation-granularity {
+ type uint16;
+
+ description
+ "List of capacity allocation steps. O-RU allocates PRB capacity rounding it up to nearest value N
+ from prb-capacity-allocation-granularity such that M >= number-of-prb-per-scs.
+ See also number-of-prb-per-scs/number-of-prb.";
+ }
+
+ uses endpoint-numerology-capacity;
+
+ leaf static-transmission-window-control-supported {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports transmission-window-control = STATIC";
+ }
+
+ leaf uniformly-distributed-transmission-supported {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type boolean;
+ description
+ "Endpoint supports transmission-type = UNIFORMLY-DISTRIBUTED";
+ }
+
+ leaf ordered-transmission-supported {
+ if-feature feat:ORDERED-TRANSMISSION;
+ type boolean;
+ description
+ "Endpoint supports ordered transmission of U-plane messages
+ and can be configured with ordered-transmission = TRUE";
+ }
+
+ leaf dynamic-transmission-window-control-supported {
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent window offset and size per symbol";
+ }
+
+ leaf dynamic-transmission-window-control-per-section-supported {
+ when "../dynamic-transmission-window-control-supported = 'true'";
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent window offset and size per section";
+ }
+
+ leaf dynamic-uniformly-distributed-transmission-supported {
+ if-feature "feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent transmission type per symbol";
+ }
+
+ leaf dynamic-uniformly-distributed-transmission-per-section-supported {
+ when "../dynamic-uniformly-distributed-transmission-supported = 'true'";
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent transmission type per section";
+ }
+
+ uses transmission-buffering-capacity {
+ when "static-transmission-window-control-supported = 'true' or dynamic-transmission-window-control-supported = 'true'";
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ }
+
+ leaf cplane-message-processing-limits-required {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ config false;
+ description
+ "Endpoint requires applying C-Plane message processing limits defined in 'per-cplane-message-limits'.
+ and can be configured with cplane-message-processing-limits-enabled = TRUE";
+ }
+
+ uses per-cplane-message-limits {
+ when "cplane-message-processing-limits-required = 'true'";
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+
+ leaf uplane-message-processing-limits-required {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ config false;
+ description
+ "Endpoint has processing limits regarding U-Plane message. Detailed types of limits are defined in 'per-uplane-message-limits'.";
+ }
+
+ uses per-uplane-message-limits {
+ when "uplane-message-processing-limits-required = 'true'";
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+
+ leaf beam-update-contention-control-limits-required {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ config false;
+ description
+ "Endpoint requires applying beam update contention control limits defined in 'beam-update-contention-control-limits'.
+ and can be configured with beam-update-contention-control-enabled = TRUE";
+ }
+
+ uses beam-update-contention-control-limits {
+ when "beam-update-contention-control-limits-required = 'true'";
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ }
+
+ leaf max-ack-nack-per-symbol {
+ type uint16;
+ description
+ "This value indicates the max number of ACK/NACK feedbacks supported by the endpoint in a symbol when
+ section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint.
+ The number of ACK/NACK feedbacks in a symbol is defined as the sum of 'numberofACKs' + 'numberofNACKs' in all C-Plane
+ messages sent by the endpoints in a symbol";
+ }
+
+ leaf non-scheduled-ueid-supported {
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "The parameter informs that the endpoint supports the capability of interpreting that those PRBs in the specified port are not allocated.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf se-11-continuity-flag-supported {
+ if-feature feat:SE11-WITH-CONTINUITY-BIT-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-tx-endpoints' which support Section Extension 11 (SE 11). The
+ O-RU may choose to indicate its support for handling continuity flag as defined in CUS-Plane Clause 7.7.11.9
+ by advertising this flag to TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' implies O-RU supports handling of 'continuity' flag in SE 11;
+ - Value of the flag advertised to 'FALSE' implies the O-RU does not support handling of 'continuity' flag in SE 11.";
+ }
+
+ leaf se-23-prb-block-mode-supported {
+ if-feature feat:SE23-PRB-BLOCK-MODE-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-tx-endpoints' which support Section Extension 23 (SE 23). The
+ O-RU may choose to indicate its support for prbMode = PRB-BLOCK mode flag as defined in CUS-Plane Clause 7.7.23.1
+ by advertising this flag as TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' implies O-RU supports both prbMode = PRB-BLOCK mode of SE 23
+ and prbMode = PRB-MASK which is the default mode when SE-23 is used.
+ - Value of the flag advertised as 'FALSE' implies O-RU supports prbMode = PRB-MASK which is the
+ default mode when SE-23 is used and the O-RU does not support prbMode = PRB-BLOCK mode.";
+ }
+
+ leaf user-group-optimization-supported {
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if O-RU sets this feature flag to 'TRUE' for a given endpoint, and the O-DU chooses to
+ support this feature by setting 'user-group-optimization-enabled-tx' to 'TRUE' for static-low-level-tx-endpoints,
+ 'user-group-optimization-enabled-rx' to 'TRUE' for static-low-level-rx-endpoints,then the O-DU shall be required
+ to send all layers for a given user group UEs i.e., UEs with same time-frequency allocation using single C-Plane
+ section description. refer to CUS-Plane specification clause 7.9.14.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-suported {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-[tr]x-endpoints' which support Section Estension 20 (SE-20).
+ The flag associated with each puncturing pattern in SE-20. The details of are defined in CUS-Plane Clause
+ 7.7.20.1. The O-RU indicates support for this feature by advertising this flag as TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' indicates O-RU supports handling of 'multiSDScope' field in SE-20.
+ - Value of the flag advertised as 'FALSE' indicates O-RU does not supports handling of 'multiSDScope' field in SE-20.";
+ }
+
+ uses supported-configuration-combinations-grp;
+
+ leaf-list supported-filter-indices {
+ type uint32;
+ description
+ "The list of supported values of filterIndex.
+ An empty list means that the set of supported values of filterIndex is not constrained.";
+ }
+
+ leaf-list bf-profile-group {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-bf-profile-group/bf-profile-id";
+ require-instance false;
+ }
+ description
+ "List of beamforming method groups supported by the endpoint, and the related delay profile values.";
+ }
+
+ list supported-pass-band-for-filterindex09-per-scs {
+ key "scs";
+ config false;
+
+ description
+ "When filterIndex 0x9 is used, O-RU shall use minimum pass band filter among the reported passband filter sizes
+ that can accommodate the numPrbc and startPrbc of all the section descriptions associated with same frameStructure.
+ Please refer to CUS specification clause 7.5.2.3 for more details.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.";
+ }
+
+ leaf supported-max-num-msg-for-filterindex0x9-per-scs {
+ type uint16;
+ description
+ "Max number of filters can be actived at a time,
+ and this parameter limits the maximum number of ST3 mesaages with filterIndex set to 9 that O-DU can send so that the total number of filters active is below the maximum limit";
+ }
+
+ leaf-list filter-bandwidth {
+ type uint64;
+ units Hz;
+ description
+ "Bandwidth of a filter given in Hz.
+ If the list for the given SCS indicated via frameStructure is not empty,
+ O-DU should set filterIndex as 1001b for mixed numerology and other channels except PRACH and NB-IoT as specified in Table 7.5.2.3-1 when ST 3 C-plane message is used.";
+
+ }
+ }
+
+ container se24-dmrs-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "Container collecting SE24 DMRS BF capabilties.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ leaf-list supported-entry-types {
+ type uint8;
+ description
+ "Supported values of entryType.";
+ }
+ leaf ue-time-partial-overlap-supported {
+ type boolean;
+ description
+ "Indicates if UE time partial overlap is supported.
+ See CUS-plane clause 12.6.1.2.1.";
+ }
+ leaf ue-freq-partial-overlap-supported {
+ type boolean;
+ description
+ "Indicates if UE frequency partial overlap is supported.
+ See CUS-plane clause 12.6.1.2.1.";
+ }
+ leaf max-user-groups-per-ue-in-time {
+ type uint16;
+ description
+ "The maximum supported number of user groups in time-domain per UE.
+ See CUS-plane clause 12.6.1.2.1";
+ }
+ leaf different-transform-precoding-in-user-group-supported {
+ type boolean;
+ description
+ "Indicates if different transform precoding in user group is supported.";
+ }
+ leaf different-cdm-without-data-in-user-group-supported {
+ type boolean;
+ description
+ "Indicates if different cdm without data in user group is supported.";
+ }
+ leaf max-dmrs-configs-per-user-group-incl-first-last-prb {
+ type uint32;
+ description
+ "Maximum number of different DMRS configurations (excluding differences in dmrsPortNumber) per user group,
+ including first and last PRB.";
+ }
+
+ leaf max-dmrs-configs-per-user-group-excl-first-last-prb {
+ type uint32;
+ description
+ "Maximum number of different DMRS configurations (excluding differences in dmrsPortNumber) per user group,
+ excluding first and last PRB.";
+ }
+ uses common-se24-dmrs-capabilities-grp;
+ grouping dmr-mask-capability-grp {
+ description
+ "Grouping of transform-precoding capabilities";
+
+ list dmrs-mask-capability {
+ key id;
+ description
+ "Parameters for DMRS mask capabilities";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf-list dmrs-symbol-mask {
+ type uint16;
+ description
+ "Supported DMRS symbol mask.
+ Empty list means all the possible symbol masks are supported.";
+ }
+ leaf max-dmrs-ant-port-number {
+ type uint32;
+ description
+ "Maximum DMRS antenna port number.";
+ }
+ leaf max-user-data-layers {
+ type uint32;
+ description
+ "Maximum number of user data layers";
+ }
+ }
+ }
+ container transform-precoding-enabled {
+ description
+ "Parameters for SE24 DMRS BF capabilities with transform precoding enabled";
+ uses dmr-mask-capability-grp;
+ list low-papr-config {
+ key id;
+ description
+ "Supported Low-PAPR configs";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf low-papr-type {
+ type uint16 {
+ range "0 .. 3";
+ }
+ description
+ "Supported values of lowPaprType";
+ }
+ leaf hopping-mode {
+ type uint16 {
+ range "0 .. 3";
+ }
+ description
+ "Supported values of hoppingMode";
+ }
+ }
+ }
+ container transform-precoding-disabled {
+ description
+ "Parameters for SE24 DMRS BF capabilities with transform precoding disabled";
+ uses dmr-mask-capability-grp;
+ list dmrs-config {
+ key id;
+ description
+ "Supported DMRS configs";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf d-type {
+ type uint16 {
+ range "0 .. 1";
+ }
+ description
+ "Supported values of dType.";
+ }
+ leaf pusch-dmrs-muxing-supported {
+ type boolean;
+ description
+ "Indicates if PUSCH DMRS muxing is supported.";
+ }
+ }
+ }
+ }
+
+ leaf sinr-reporting-supported {
+ if-feature feat:DMRS-BF-EQ;
+ type boolean;
+ default false;
+ description
+ "Indicates if SINR reporting is supported.";
+ }
+ container sinr-reporting-capabilities {
+ when "../sinr-reporting-supported = 'true'";
+ if-feature feat:DMRS-BF-EQ;
+ description
+ "Container collecting parameters related to capabilities of SINR reporting";
+ leaf simultaneous-sinr-and-dmrs-sending-supported {
+ type boolean;
+ description
+ "Indicates if simultaneous SINR and DMRS sending is supported.";
+ }
+ list supported-sinr-resolutions {
+ key "id";
+ description
+ "The list of supported SINR reporting resolutions.
+ This entry is applicable if maximum number of data layers in any user group in any slot does not exceed value of max-data-layers.
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a supported SINR reporting resolution.";
+ }
+ leaf sinr-max-data-layers {
+ type uint8;
+ description
+ "The maximum number of data layers scheduled in any user group in a slot.";
+ }
+ leaf-list sinr-per-prb {
+ type uint8;
+ description
+ "List of supported values. Indicates number of SINR values per PRB.";
+ }
+ leaf-list sinr-slot-mask {
+ type uint16;
+ description
+ "List of bitmasks representing supported patterns of SINR reporting in time domain. An emplty list means that the set of supported SINR reporting is unrestricted.";
+ }
+ }
+ container supported-sinr-reference-level {
+ description
+ "Supported range of SINR reference levels values.
+
+ See CUS specification clause 7.2.10 for more details";
+ leaf sinr-reference-level-min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Minimum supported SINR reference level.";
+ }
+ leaf sinr-reference-level-max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Maximum supported SINR reference level.";
+ }
+ }
+ list supported-sinr-compression-methods {
+ key "id";
+ description
+ "The list of supported SINR compression methods.";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a supported SINR compression method.";
+ }
+ uses cf:sinr-compression-details;
+ }
+ }
+ container supported-symb-reorder-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "List of capabilities related to symbol reordering.";
+ uses supported-symb-reorder-capability;
+ }
+ leaf-list supported-user-group-self-assembly-modes {
+ if-feature feat:USER-GROUP-SELF-ASSEMBLY;
+ type user-group-self-assembly-mode ;
+ description
+ "List of user group self assembly mode(s) supported by an endpoint. The O-RU may support SELF-ASSEMBLY-WITH-GROUP-ID and/or SELF-ASSEMBLY-WITHOUT-GROUP-ID.";
+ }
+ leaf-list continuity-block-sizes-supported {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:CONTINUITY-BLOCK-SIZE";
+ type uint16;
+ description
+ "List of continuity bock sizes supported by the O-RU.";
+ }
+ leaf eq-scale-offset-min {
+ if-feature feat:DMRS-BF-EQ;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Refer to cus specification 8.3.1.4, max value 0 dB";
+ }
+ leaf eq-scale-offset-max {
+ if-feature feat:DMRS-BF-EQ;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Refer to cus specification 8.3.1.4, max value 0 dB";
+ }
+ leaf-list rrm-meas-supported {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type rrm-meas-types;
+ description
+ "List of rrm types supported by the endpoint type";
+ }
+ leaf max-ipn-unalloc-reports-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-UNALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This value indicates the maximum number of ipn unallocated measurement reports per PRB (PRB range) and slot";
+ }
+ leaf max-ipn-unalloc-symbols-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-UNALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This parameter indicates maximum number of measured symbols of all measurement reports for a PRB (PRB range) in the slot ";
+ }
+ leaf max-ipn-alloc-reports-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-ALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This value indicates the maximum number of ipn alloc measurement reports per PRB per slot. Relationship between this value and alloc-ipn-per-sym-supported can be found in CUS plan specification clause 9.2.2.4";
+ }
+ leaf-list alloc-ipn-per-dmrs-sym-grp-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-ALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint8 {
+ range "0 .. 1";
+ }
+ description
+ "This parameter indicates alloc-ipn measurement type(s) supported by the O-RU.
+ Refer to CUS specification clause 9.2.2.4 for details";
+ }
+ leaf se-10-bgt-11b-supported {
+ type boolean;
+ default false;
+ description
+ "The parameter is applicable for static-low-level-[tr]x-endpoints supporting Section Extension 10. This flag
+ if set to TRUE indicates that the O-RU advertised endpoint, supporting Section Extension 10 supports beamGroupType = 11b.
+ It is mandatory for endpoints supporting DMRS-BF-EQ/DMRS-BF-NEQ beamforming methods to support beamGroupType = 11b.
+ refer to CUS-Plane specification clause 7.7.10.1";
+ }
+
+ leaf-list se-27-odu-controlled-dimensionality-reduction-supported {
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type enumeration {
+ enum STATIC {
+ description
+ "Static O-DU controlled dimnesionality reduction enabled.";
+ }
+ enum DYNAMIC {
+ description
+ "Dynamic O-DU controlled dimnesionality reduction enabled.";
+ }
+ }
+ description
+ "Supported type O-DU controlled dimensionality reduction using SE27.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ leaf se-27-omission-when-enabled-supported {
+ when "(../se-27-odu-controlled-dimensionality-reduction-supported = 'STATIC')
+ or (../se-27-odu-controlled-dimensionality-reduction-supported = 'DYNAMIC')";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type boolean;
+ description
+ "Indicates if O-RU supports omission of SE27 when O-DU controlled dimensionality reduction using SE27 is enabled.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ list supported-se-27-configurations {
+ when "(../se-27-odu-controlled-dimensionality-reduction-supported = 'STATIC')
+ or (../se-27-odu-controlled-dimensionality-reduction-supported = 'DYNAMIC')";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ key number-of-ue-data-layers;
+ description
+ "List of supported values of numElements parameter per number of UE
+ data layers scheduled in user group.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ leaf number-of-ue-data-layers {
+ type uint16;
+ description
+ "Number of UE data layers scheduled in user group.";
+ }
+ leaf-list supported-se-27-num-elements {
+ type uint16;
+ description
+ "Supported values of numElements in SE27 for the provided number of UE data layers.";
+ }
+ }
+ }
+
+ list transmission-window-schedules {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ key id;
+ description
+ "Parameters for scheduled UL U-plane message transmission (static transmission window control)";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a UL U-plane message transmission schedule";
+ }
+ list schedule {
+ key symbol;
+ description
+ "Defines transmission window offset for given symbol.
+ If no entry is present for a symbol then O-RU assumes offset=0 for that symbol.
+ Entries with offset=0 shall be omitted.";
+ leaf symbol {
+ type uint16;
+ description
+ "Number of a symbol within a frame for which transmission offset is given.";
+ }
+ leaf offset {
+ type uint16;
+ description
+ "Transmission window offset; expressed as number of symbols the transmission window start is delayed by.
+ This value is added to u-plane-transmission-control/transmission-window-offset.
+ For restrictions on value of offset see description of transmission-window-offset.";
+ }
+ }
+ }
+
+ list endpoint-capacity-sharing-groups {
+ key "id";
+ config false;
+ description
+ "Represents groups of endpoints that share capacity. Depending on O-RU implementation,
+ processing resources that handle CU-plane (e.g. memory to keep sections and beams)
+ could be allocated per endpoint or shared between several endpoints.
+ To address this O-RU shall report own capability per endpoint (see endpoint-types)
+ and per group of endpoints sharing capacity.
+ If endpoint is in multiple groups then resulting constraint is minimum over all groups.
+ Note: values of parameters representing capacity that is not shared between endpoints in a group
+ shall be set to max value of specific parameter; this effectively removes related constraint.
+ Note: For any endpoint supporting mixed numerology within slot/symbol (multiple-numerology-supported=TRUE)
+ * Interval specific (per-slot and per-symbol) capacity constraints instantaneous capacity usage
+ (i.e. capacity is shared/distributed between all numerologies used at an instant of time).
+ * Instantaneous capacity usage is the sum of capacity usages of all intervals of a specific type (slot/symbol)
+ that share the instant of time at which instantaneous capacity usage is evaluated regardless of numerology.
+ * Capacity used in an interval is allocated at the start of the interval and is released at the end of the interval
+ (e.g. capacity used for symbol #N of numerology #M is unavailable during symbol #N and available for reuse after symbol #N ends).";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies group of endpoints sharing resources.
+ Values shall start with 0 and shall be allocated without gaps.";
+ }
+ uses endpoint-section-capacity;
+ uses endpoint-beam-capacity;
+ uses endpoint-prb-capacity;
+ uses endpoint-numerology-capacity;
+ uses endpoint-section-extension-limits;
+
+ leaf max-endpoints {
+ type uint16;
+ description
+ "Indicates how many endpoints in the group can be used4 simultaneously";
+ }
+ leaf max-managed-delay-endpoints {
+ type uint16;
+ description
+ "Number of endpoints supporting managed delay that can be used (configured for use) at a time";
+ }
+ leaf max-non-managed-delay-endpoints {
+ type uint16;
+ description
+ "Number of endpoints supporting non-managed delay that can be used (configured for use) at a time";
+ }
+ uses transmission-buffering-capacity {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ }
+
+ uses per-cplane-message-limits {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+ leaf max-ack-nack-per-symbol {
+ type uint16;
+ description
+ "This value indicates the max number of ACK/NACK feedbacks supported by the endpoint sharing group in a symbol when
+ section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint sharing group.
+ The number of ACK/NACK feedbacks in a symbol is defined as the sum of 'numberofACKs' + 'numberofNACKs' in all C-Plane
+ messages sent by the endpoints in group in a symbol";
+ }
+ uses supported-configuration-combinations-grp;
+
+ container se24-dmrs-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "Container collecting SE24 DMRS BF capabilties.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ uses common-se24-dmrs-capabilities-grp;
+ }
+ }
+
+ list endpoint-prach-group {
+ key "id";
+ config false;
+ description
+ "Represents group of a series of PRACH preamble formats";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies group of PRACH preamble formats.";
+ }
+
+ leaf-list supported-prach-preamble-formats {
+ type prach-preamble-format;
+ min-elements 1;
+ description
+ "the list of PRACH preamble formats supported by the endpoint-type that is
+ applicable to static-low-level-rx-endpoints in the O-RU";
+ }
+
+ }
+
+ list supported-compression-method-sets {
+ key "id";
+ config false;
+ description
+ "List of available compression methods supported by device";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for compression method set";
+ }
+
+ list compression-method-supported {
+ uses cf:compression-method-grouping;
+ uses cf:compresion-format-grp {
+ status deprecated;
+ }
+
+ leaf-list fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+
+ }
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer to endpoints to have information what
+ exactly is supported on particular endpoint";
+ }
+ }
+
+ grouping supported-configuration-combinations-grp {
+ description
+ "Grouping of supported freqOffset & PRB range combinations.";
+
+ list supported-configuration-combinations {
+ key "combination-id";
+ config false;
+
+ leaf combination-id {
+ type uint32;
+ description
+ "Identification number for a combination.";
+ }
+
+ list set {
+ key "set-id";
+
+ leaf set-id {
+ type uint32;
+ description
+ "Identification number for a set.";
+ }
+
+ leaf max-overlapping-instances {
+ type uint32;
+ description
+ "Max number of configs of the set that can be used at the same time.";
+ }
+
+ list config {
+ key "config-id";
+
+ leaf config-id {
+ type uint32;
+ description
+ "Identification number for a config.";
+ }
+
+ leaf-list scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.";
+ }
+
+ leaf-list carrier-types {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf filter-pass-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Width of a filter given in Hz.
+ The filter center frequency is given in center-of-channel-bandwidth of an array carrier.
+ When filterIndex 0x9 is used, O-RU shall report all the passband filter bandwidth per scs using the list supported-pass-band-for-filterindex09-per-scs.";
+ }
+
+ leaf max-prb-range {
+ type uint32;
+
+ description
+ "Maximum frequency range of PRBs that may be requested per frequency offset. Either contiguously or non-contiguously.
+ Total number of PRBs requested per config shall not exceed this value.";
+ }
+
+ leaf center-from-freqoffset {
+ type boolean;
+ description
+ "This node allows to distinguish between combinations valid when
+ center-from-freqoffset-enabled is set to TRUE and combinations
+ valid when center-from-freqoffset-enabled is set to FALSE";
+ }
+
+ leaf-list supported-filter-indices {
+ type uint32;
+ description
+ "The list of supported values of filterIndex.
+ An empty list means that the set of supported values of filterIndex is constrained by the supported-filter-indices
+ provided in the endpoint type.";
+ }
+
+ description
+ "Supported freqOffset & PRB range configuration.
+ Configuration is an instance of processing output equivalent to single FFT operation.";
+ }
+ description
+ "Set of freqOffset & PRB range configurations that require same resource allocation.";
+ }
+ description
+ "List of supported combinations of freqOffset & PRB range configurations.
+ If a leaf is not present in a list element it implies there is no constraint on that particular
+ parameter for the configuration in question.";
+ }
+ leaf center-from-freqoffset-supported {
+ type boolean;
+ description
+ "Endpoint's support for autonomous center frequency (k0) calculation based on frequency offset.
+ This capability applies only to RX endpoints.";
+ }
+ }
+
+ grouping supported-symb-reorder-capability {
+ description
+ "List of capabilities related to symbol reordering.";
+ leaf-list supported-symb-reorder-capability {
+ type symb-reorder-capability;
+ description
+ "List of supported symbol reordering methods.";
+ }
+ leaf max-num-symbol-reordering-pattern-per-slot {
+ when "../supported-symb-reorder-capability = 'PER-SECTION-TX-WINDOW-REASSIGNMENT'";
+ type uint16;
+ description
+ "This parameter defines the maximum number of unique symbol reassignment patterns supported
+ per slot per rx-array-carrier, where a 'symbol reassignment pattern' comprises 14 symbol
+ numbers specifying an altered symbol order (using txWinForOnAirSymbol0~13). The maximum
+ value applies over all SE25 invocations, including when an SE25 invocation includes
+ multiple symbol reassignment patterns. Repeated invocations of a single symbol reassignment
+ pattern shall count as a single unique instance. When endpoints of different endpoint-types
+ with different values of this parameter are associated with an rx-array-carrier, then the
+ smallest of the values shall apply.";
+ }
+ leaf-list up-symbolId-type-supported {
+ type up-SymbolId-type;
+ description
+ "List of supported symbol reordering symbolId interpretation capability.";
+ }
+ }
+
+ 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-list restricted-interfaces {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Optionally used to indicate that a low-level link is constrained to operate only via a subset of the available interfaces.";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ }
+ mandatory true;
+ 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).";
+ }
+
+ leaf endpoint-type {
+ type leafref {
+ path "../../endpoint-types/id";
+ }
+
+ description
+ "Reference to endpoint type capabilities list element supported by this endpoint";
+ }
+
+ leaf-list capacity-sharing-groups {
+ type leafref {
+ path "../../endpoint-capacity-sharing-groups/id";
+ }
+
+ description
+ "Reference to capacities of sharing-groups supported by this endpoint";
+ }
+
+ list supported-reference-level {
+ if-feature TX-REFERENCE-LEVEL;
+ key "id";
+ description
+ "Informs about supported ranges for gain reference level.";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular range";
+ }
+
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description
+ "Minimum of supported gain reference level";
+ }
+
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description
+ "Maximum of supported gain reference level";
+ }
+ }
+
+ container compression {
+ description
+ "Container collecting compression related parameters.";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports real-time variable bit with";
+ }
+
+ leaf supported-compression-set-id {
+ type leafref {
+ path "../../../supported-compression-method-sets/id";
+ }
+
+ description
+ "Id of supported compression set for this endpoint";
+ }
+ }
+
+ uses endpoint-tdd-pattern-support;
+
+ leaf-list energy-sharing-group-id {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "This value indicates a group of common underlying HW that can be used for energy savings.";
+ }
+ leaf se10-member-candidate-list {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ type leafref {
+ path "/user-plane-configuration/se10-member-candidate-tx-lists/id";
+ require-instance false;
+ }
+ description
+ "This parameter is a pointer to a given member-candidate list entry in 'se10-member-candidate-tx-lists'.
+ This parameter shall be applicable for endpoints supporting Section Extension 10";
+ }
+ }
+
+ 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-list restricted-interfaces {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Optionally used to indicate that a low-level link is constrained to operate only via a subset of the available interfaces.";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ }
+ mandatory true;
+ 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).";
+ }
+
+ leaf endpoint-type {
+ type leafref {
+ path "../../endpoint-types/id";
+ }
+
+ description
+ "Reference to endpoint type capabilities list element supported by this endpoint";
+ }
+
+ leaf-list capacity-sharing-groups {
+ type leafref {
+ path "../../endpoint-capacity-sharing-groups/id";
+ }
+
+ description
+ "Reference to capacities of sharing-groups supported by this endpoint";
+ }
+
+ leaf prach-group {
+ type leafref {
+ path "../../endpoint-prach-group/id";
+ require-instance false;
+ }
+ description
+ "An optional leaf used for those rx endpoints that support PRACH, indicating
+ the group id describing the set of of PRACH preambles supported";
+ }
+
+ container compression {
+ description
+ "Container collecting compression related parameters.";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports real-time variable bit with";
+ }
+
+ leaf supported-compression-set-id {
+ type leafref {
+ path "../../../supported-compression-method-sets/id";
+ }
+
+ description
+ "Id of supported compression set for this endpoint";
+ }
+ }
+
+ uses endpoint-static-config-support;
+
+ uses endpoint-tdd-pattern-support;
+
+ leaf transmission-order {
+ when "(/user-plane-configuration/endpoint-types[id=current()/../endpoint-type]/ordered-transmission-supported = 'true')";
+ if-feature feat:ORDERED-TRANSMISSION;
+ type uint32;
+ description
+ "The value indicates relative order of sending U-plane messages specific to same symbol
+ and transmission window by two endpoints with ordered-transmission = TRUE
+ belonging to the same transmission-order-group;
+ multiple endpoints may report the same value if their relative sending order is not guaranteed";
+ }
+
+ leaf transmission-order-group {
+ when "(/user-plane-configuration/endpoint-types[id=current()/../endpoint-type]/ordered-transmission-supported = 'true')";
+ if-feature feat:ORDERED-TRANSMISSION;
+ type uint32;
+ description
+ "The value indicates a group of endpoints that preserve relative ordering of message sending;
+ message sending between endpoints in different groups is not guaranteed";
+ }
+
+ leaf-list energy-sharing-group-id {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "This value indicates a group of common underlying HW that can be used for energy savings.";
+ }
+ leaf se10-member-candidate-list {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ type leafref {
+ path "/user-plane-configuration/se10-member-candidate-rx-lists/id";
+ require-instance false;
+ }
+ description
+ "This parameter is a pointer to a given member-candidate list entry in 'se10-member-candidate-rx-lists'.
+ This parameter shall be applicable for endpoints supporting Section Extension 10";
+ }
+ }
+
+ 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 modifiable element in static object";
+
+ leaf name {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Unique name of low-level-tx-endpoint object. Reference to static object";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-tx-endpoint
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+
+ uses tx-endpoint-compression-grouping;
+ uses scs-config;
+
+ container e-axcid {
+ uses eaxc;
+
+ description
+ "Contains local address of low level TX endpoint offered by NETCONF server.";
+ }
+
+ uses coupling-methods;
+
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints[name=current()/../name]/configurable-tdd-pattern-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - needed for conditional under tx-array-carrier";
+ }
+
+ leaf cplane-message-processing-limits-enabled {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support the C-Plane message processing limits and has selected to adhere to the C-Plane limits defined in 'per-cplane-message-limits'.
+ FALSE: O-DU shall not support C-Plane message processing limits and endpoint limits defined in 'per-cplane-message-limits' shall not apply";
+ }
+
+ leaf uplane-message-section-header-limit-enabled {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "O-DU declares to obey the limit exposed via the leaf max-section-headers-per-uplane-message by setting this parameter to 'true'.
+ For details of this parameter's usage, please refer to M-plane spec clause 15.10";
+ }
+
+ leaf beam-update-contention-control-enabled {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support beam update contention control feature of O-RU.Thus requiring O-DU to comply with beam
+ updates restrictions defined in CUS-Plane Spec Section 'Weight-based dynamic beamforming'. In this case applicable
+ beam limits defined in 'beam-update-contention-control-limits' shall apply.
+ FALSE: O-DU shall not support beam update contention control feature of O-RU. Applicable beam limits defined in
+ 'endpoint-beam-capacity' shall apply";
+ }
+
+ container channel-information-prb-group-configuration {
+ if-feature feat:CHANNEL-INFORMATION-PRB-GROUP;
+ description
+ "Container for configurable parameters for channel information prb group";
+
+ leaf enable-ci-prb-group {
+ type boolean;
+ description
+ "Informs whether or not to enable channel information PRB group in the O-RU,
+ if its value is set to true, the O-RU shall receive and process channel
+ information (e.g., ST6) with PRB group size of configured ci-prb-group-size.";
+ }
+
+ leaf ci-prb-group-size {
+ type uint8 {
+ range "2..254";
+ }
+ description
+ "The configured channel information PRB group size.
+ If enable-ci-prb-group is configured as TRUE, and the IE ciPrbGroupSize doesn't exist in a section description for channel information,
+ the parameter ci-prb-group-size shall be used for this section description.
+ If the IE ciPrbGroupSize exists in a section description for channel information,
+ no matter whether enable-ci-prb-group is configured as TRUE, the IE ciPrbGroupSize shall be used for this section description.";
+ }
+ }
+
+ leaf non-scheduled-ueid-enabled{
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "If O-DU configures 'non-scheduled-ueid-enabled' = TRUE,
+ and Section Extension 10 is applied to Section Types 5 and beamGroupType = 10b,
+ and the O-DU set ueId of a port in Section Extension 10 to 0x7FFF,
+ the endpoint shall interpret that the PRBs in the section description are not scheduled for this port.
+ The endpoint only interprets this leaf if non-scheduled-ueid-supported = true is reported in the related static endpoint, in other cases this leaf is ignored.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf se-11-continuity-flag-enabled {
+ if-feature feat:SE11-WITH-CONTINUITY-BIT-SUPPORT;
+ type boolean;
+ default false;
+ description
+ "By setting the value of this leaf node to TRUE, the O-DU declares it will provide 'continuity' flag information in SE 11.
+ In this case the O-DU shall provide PRB region 'continuity' information in every SE 11 sent to the applicable low-level-tx-endpoint(s)
+ (static-low-level-tx-endpoit(s) which indicated support of this feature by setting 'se-11-continuity-flag-supported' flag to TRUE).
+ In case
+ - O-DU is running SW conformant to older O_RAN release and does not interpret the flag 'se11-continuity-bit-enabled' or
+ - the O-DU sets 'se11-continuity-flag-enabled' = FALSE,
+ no information regarding PRB region continuity is sent to the O-RU. In such case the O-RU shall process the PRB bundles as
+ it would have in the absence of the 'continuity' flag in SE11.
+ This behavior shall be same as when O-RU receives message with 'reserved' field value set to '0b'.";
+ }
+
+ leaf prg-size-supp-se-21-with-st6-enabled {
+ if-feature feat:PRG-SIZE-SUPP-SE-21-WITH-ST6;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall send prgSize information from the O-DU to the O-RU as described in Clause 7.7.2.3.1 of the CUS-Plane spec.
+ FALSE:prgSize information cannot be sent from the O-DU to the O-RU using Section Type 6.";
+ }
+
+ leaf prg-size-supp-se-21-with-st5-enabled {
+ if-feature feat:PRG-SIZE-SUPP-SE-21-WITH-ST5;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall send prgSize information from the O-DU to the O-RU as described in Clause 7.7.2.3.2 of the CUS-Plane spec.
+ FALSE:prgSize information cannot be sent from the O-DU to the O-RU using Section Type 5.";
+ }
+
+ leaf user-group-optimization-enabled-tx {
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if the O-RU advertises the feature flag to 'user-group-optimization-supported' set to
+ TRUE for associated static-level-tx-endpoint, the O-DU may choose to set this flag to 'TRUE' or 'FALSE'.
+ - If set to 'TRUE', the O-DU shall be required to send all layers for a given user group UEs i.e., UEs with same
+ time-frequency allocation using single C-Plane section description.
+ - If set to 'FALSE', the O-DU restriction to send all layers for a given user group UEs shall not apply.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-enabled-tx {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "This flag is applicable for O-RU adevertised static-level-tx-endpoint advertises for which
+ 'se-20-multi-sd-punc-pattern-suported' = TRUE. The flag is configured by the O-DU to TRUE/FALSE.
+ - Value of the flag set to 'TRUE' indicates O-DU shall set the value 'multiSDScope' in SE-20 to TRUE/FALSE.
+ - Value of the flag set to 'FALSE' indicates O-DU shall not set the value 'multiSDScope' in SE-20. The corresponding
+ fields shall be interpretted as reserved field by the O-RU.";
+ }
+
+ container combination-configuration {
+ leaf endpoint-type {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints[name=current()/../../name]/endpoint-type";
+ require-instance false;
+ }
+ description
+ "Leafref to the endpoint-type of the endpoint.";
+ }
+
+ leaf combination-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../endpoint-type]/supported-configuration-combinations/combination-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which configuration combination will be used by the endpoint.";
+ }
+
+ list configurations {
+ key id;
+
+ leaf id {
+ type uint32;
+ description
+ "Identifier of an entry in the list";
+ }
+
+ leaf set-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set/set-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which set will be used by the endpoint.";
+ }
+
+ leaf config-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set[set-id = current()/../set-id]/config/config-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which config will be used by the endpoint.";
+ }
+
+ description
+ "An optional list describing which configurations will be used by the endpoint.
+ The list can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.
+ If the list is empty, then O-DU intends to use every capability within combination identified by combination-id.";
+ }
+
+ description
+ "An optional container describing which configuration combination will be used by the endpoint.
+ The container can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+ }
+
+ leaf configured-bf-profile-id {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-types/bf-profile-group";
+ require-instance false;
+ }
+ description
+ "Configure the beamforming method list and related delay profiles will be used by the endpoint.
+ The configured-bf-profile-id must be one of the supported bf-profile-id(s) reported by the endpiont-type related to the endpoint.
+ If O-DU does not set configured-bf-profile-id, the O-RU shall not support the feature.";
+ }
+
+ leaf-list bf-methods {
+ if-feature "feat:SELECTED-BF-METHOD-CONFIGURATION and feat:BF-DELAY-PROFILE";
+ type beamforming-method-type;
+ description
+ "Beamforming method(s) configured on the endpoint.
+
+ If the value of configured-bf-profile-id is set, then beamforming method(s) configured on the endpoint shall
+ be selected from the set of supported beamforming methods of the selected endpoint-bf-profile-group
+ Otherwise, the beamforming method(s) configured on the endpoint shall be selected from the set of supported
+ beamforming methods reported in the related endpoint-bf-profile-group(s).";
+ }
+ }
+
+ 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 modifiable element in static object";
+
+ leaf name {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Unique name of low-level-rx-endpoint object. Reference to static object";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-rx-endpoint
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ uses rx-endpoint-compression-grouping;
+ uses scs-config;
+
+ list ul-fft-sampling-offsets {
+ key scs;
+ description
+ "List of FFT sampling offsets configured for each SCS that will be used.
+ Client shall configure one element for each SCS that will be used.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane
+ Note: set of allowed values is restricted by SCS derived from values in supported-frame-structures.";
+ }
+
+ leaf ul-fft-sampling-offset {
+ type uint16;
+
+ units Ts;
+ description
+ "Determines time advance of capture window for FFT.
+ Value represents time advance of capture window start in relation to the end of CP. Unit is Ts.
+ The value of this parameter shall not be larger than the duration of the cyclic prefix; in case of
+ variability of the cyclic prefix duration, the limit is the shortest duration of the cyclic prefix in use.
+ Note: value of this parameter is usually set to '0' (zero) for PRACH channels.
+ Any phase offset resulting from the non-zero value of this parameter is handled in O-DU.
+ Please refer to the O-RAN CUS-Plane, clause 4.4.3 for more details on the intended usage and value restrictions.";
+ }
+ }
+
+ container e-axcid {
+ uses eaxc;
+
+ description
+ "Contains local address of low level RX endpoint offered by NETCONF server.";
+ }
+
+ leaf eaxc-gain-correction {
+ if-feature EAXC-GAIN-CORRECTION;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ default 0;
+ description
+ "eAxC specific part of overall gain_correction.
+ gain_correction = common array-carrier gain-correction + eAxC-gain-correction.";
+ }
+
+ leaf non-time-managed-delay-enabled {
+ type boolean;
+ default false;
+ description
+ "Tells if non time managed delay shall be enabled";
+ }
+
+ uses coupling-methods;
+
+ leaf static-config-supported {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - for further conditionals";
+ }
+
+ leaf static-prach-configuration {
+ when "(/user-plane-configuration/low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-prach-configurations/static-prach-config-id";
+ }
+ description
+ "This parameter creates reference to static PRACH configuration applicable for particular endpoint";
+ }
+
+ leaf static-srs-configuration {
+ when "(/user-plane-configuration/low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'SRS')";
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-srs-configurations/static-srs-config-id";
+ }
+ description
+ "This parameter creates reference to static SRS configuration applicable for particular endpoint";
+ }
+
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/configurable-tdd-pattern-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - needed for conditional under rx-array-carrier";
+ }
+
+ uses u-plane-transmission-control;
+
+ leaf ordered-transmission {
+ if-feature feat:ORDERED-TRANSMISSION;
+ type boolean;
+ default false;
+ description
+ "Commands O-RU to order UL U-plane message transmission between endpoints
+ Meaningless when ordered transmission is not supported for particular endpoint.";
+ }
+
+ leaf cplane-message-processing-limits-enabled {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support C-Plane message processing limits and has selected to adhere
+ to the C-Plane limits defined in 'per-cplane-message-limits'.
+ FALSE: O-DU shall not support C-Plane message processing limits and hence C-Plane and
+ endpoint limits defined in 'per-cplane-message-limits' shall not apply";
+ }
+
+ leaf beam-update-contention-control-enabled {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support beam update contention control feature of O-RU.Thus requiring O-DU to comply with beam
+ updates restrictions defined in CUS-Plane Spec Section 'Weight-based dynamic beamforming'. In this case applicable
+ beam limits defined in 'beam-update-contention-control-limits' shall apply.
+ FALSE: O-DU shall not support beam update contention control feature of O-RU. Applicable beam limits defined in
+ 'endpoint-beam-capacity' shall apply";
+ }
+
+ leaf non-scheduled-ueid-enabled{
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "If O-DU configures 'non-scheduled-ueid-enabled' = TRUE,
+ and Section Extension 10 is applied to Section Types 5 and beamGroupType = 10b,
+ and the O-DU set ueId of a port in Section Extension 10 to 0x7FFF,
+ the endpoint shall interpret that the PRBs in the section description are not scheduled for this port.
+ The endpoint only interprets this leaf if non-scheduled-ueid-supported = true is reported in the related static endpoint, in other cases this leaf is ignored.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf center-from-freqoffset-enabled {
+ type boolean;
+ default false;
+ description
+ "Endpoint is enabled / prohibited to autonomously calculate center frequency based on frequency offset.";
+ }
+
+ leaf user-group-optimization-enabled-rx{
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if the O-RU advertises the feature flag to 'user-group-optimization-supported' set to
+ TRUE for associated static-level-rx-endpoint, the O-DU may choose to set this flag to 'TRUE' or 'FALSE'.
+ - If set to 'TRUE', the O-DU shall be required to send all layers for a given user group UEs i.e.,
+ UEs with same time-frequency allocation using single C-Plane section description.
+ - If set to 'FALSE', the O-DU restriction to send all layers for a given user group UEs shall not apply.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-enabled-rx {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "This flag is applicable for O-RU adevertised static-level-rx-endpoint advertises for which
+ 'se-20-multi-sd-punc-pattern-suported' = TRUE. The flag is configured by the O-DU to TRUE/FALSE.
+ - Value of the flag set to 'TRUE' indicates O-DU shall set the value 'multiSDScope' in SE-20 to TRUE/FALSE.
+ - Value of the flag set to 'FALSE' indicates O-DU shall not set the value 'multiSDScope' in SE-20. The corresponding
+ fields shall be interpretted as reserved field by the O-RU.";
+ }
+
+ container combination-configuration {
+ leaf endpoint-type {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../../name]/endpoint-type";
+ require-instance false;
+ }
+ description
+ "Leafref to the endpoint-type of the endpoint.";
+ }
+
+ leaf combination-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../endpoint-type]/supported-configuration-combinations/combination-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which configuration combination will be used by the endpoint.";
+ }
+
+ list configurations {
+ key id;
+
+ leaf id {
+ type uint32;
+ description
+ "Identifier of an entry in the list";
+ }
+
+ leaf set-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set/set-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which set will be used by the endpoint.";
+ }
+
+ leaf config-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set[set-id = current()/../set-id]/config/config-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which config will be used by the endpoint.";
+ }
+
+ description
+ "An optional list describing which configurations will be used by the endpoint.
+ The list can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+
+ }
+
+ description
+ "An optional container describing which configuration combination will be used by the endpoint.
+ The container can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+ }
+
+ leaf configured-bf-profile-id {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-types/bf-profile-group";
+ require-instance false;
+ }
+ description
+ "Configure which beamforming method list and related delay profile will be used by the endpoint.
+ The configured-bf-profile-id must be one of the supported bf-profile-id(s) reported by the endpiont-type related to the endpoint.
+ If O-DU does not set configured-bf-profile-id, the O-RU shall not support the feature.";
+ }
+
+ leaf sinr-reporting-enabled {
+ if-feature feat:DMRS-BF-EQ;
+ type boolean;
+ default false;
+ description
+ "Enables SINR reporting for the endpoint.";
+ }
+
+ container sinr-reporting-configuration {
+ when "../sinr-reporting-enabled = 'true'";
+ if-feature feat:DMRS-BF-EQ;
+ description
+ "Container collecting parameters related to configuration of SINR reporting";
+
+ container sinr-resolution {
+ description
+ "Container collecting parameters related to configuration of SINR reporting
+ resolution.
+ Supported values are constrained by the values reported in endpoint-types/supported-sinr-resolutions.
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ leaf sinr-per-prb {
+ type uint8;
+ description
+ "Number of SINR values per PRB.";
+ }
+ leaf sinr-slot-mask {
+ type uint16;
+ description
+ "Pattern of SINR reports represented as a bitmask.";
+ }
+ }
+ container sinr-compression {
+ description
+ "Configuration of SINR compression.";
+ uses cf:sinr-compression-details;
+ leaf sinr-reference-level-config {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "SINR reference level.";
+ }
+
+ leaf sinr-reference-level-used {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ config false;
+ description
+ "SINR reference level used. This parameter shall be the O-RU's best approximation of the sinr-reference-level-config.";
+ }
+ }
+ }
+ leaf se26-usage-enabled {
+ type boolean;
+ default false;
+ description
+ "When se26-usage-enabled = FALSE, O-DU shall not use SE 26 and shall not convey UE frequency offset information.
+ When se26-usage-enabled = TRUE, O-DU may convey UE frequency offset information via SE 26.";
+ }
+
+ leaf-list bf-methods {
+ if-feature "feat:SELECTED-BF-METHOD-CONFIGURATION and feat:BF-DELAY-PROFILE";
+ type beamforming-method-type;
+ description
+ "Beamforming method(s) configured on the endpoint.
+
+ If the value of configured-bf-profile-id is set, then beamforming method(s) configured on the endpoint shall
+ be selected from the set of supported beamforming methods of the selected endpoint-bf-profile-group
+ Otherwise, the beamforming method(s) configured on the endpoint shall be selected from the set of supported
+ beamforming methods reported in the related endpoint-bf-profile-group(s).";
+ }
+ leaf eq-scale-offset-config {
+ if-feature "feat:DMRS-BF-EQ";
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "scale offset is configured by the O-DU to avoid overflow when encoding data for the fronthaul interface.Refer to cus specification clause 8.1.3.4 for details.";
+ }
+ leaf eq-scale-offset-used {
+ if-feature "feat:DMRS-BF-EQ";
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ config false;
+ description
+ "scale offset is used by the O-RU to avoid overflow when encoding data for the fronthaul interface.Refer to cus specification clause 8.1.3.4 for details.";
+ }
+ leaf-list rrm-meas-enabled {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type rrm-meas-types;
+ description
+ "This parameter indicates which rrm measurements are enabled for this low level endpoint";
+ }
+
+ leaf se-27-odu-controlled-dimensionality-reduction-enabled {
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type enumeration {
+ enum DISABLED {
+ description
+ "O-DU controlled dimnesionality reduction disabled.";
+ }
+ enum STATIC {
+ description
+ "Static O-DU controlled dimnesionality reduction enabled.";
+ }
+ enum DYNAMIC {
+ description
+ "Dynamic O-DU controlled dimnesionality reduction enabled.";
+ }
+ }
+ default DISABLED;
+ description
+ "Parameter indicating if O-DU controlled dimnesionality reduction is enabled.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ leaf se-27-num-elements {
+ when "../se-27-odu-controlled-dimensionality-reduction-enabled = 'STATIC'";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type uint16;
+ description
+ "Configured value of numElements in SE27.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ }
+
+ 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.";
+ }
+ list odu-ids {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "An optional list of o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a tx-array-carrier
+ associated with one or more particular odu-id(s).
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a single operator environment, where watchdog supervision is performed
+ on a per odu-id basis and supervision failure only results in a sub-set
+ of carriers being de-activated.";
+
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "feat:SHARED-ORU-MULTI-ODU and feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "An optional list of sro and o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a tx-array-carrier
+ associated with one or more particular odu-id(s) operated by a particular sro-id.
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a multi operator environment, where watchdog supervision is performed on
+ a per odu-id basis and supervision failure only results in a sub-set of
+ carriers being de-activated.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+
+ uses tx-common-array-carrier-elements;
+
+ leaf band-number {
+ if-feature mcap:LAA;
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ require-instance false;
+ }
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multi-band solutions.";
+ }
+
+ container lte-tdd-frame {
+ when "(/user-plane-configuration/tx-array-carriers/rw-type = 'LTE') and (/user-plane-configuration/tx-array-carriers/rw-duplex-scheme = 'TDD')";
+ status deprecated;
+ description
+ "Container which consists of global configurable parameters for tdd Frame.
+ This contained is deprecated due to introduction of TDD pattern configuration
+ applicable in a common way for LTE and NR.";
+
+ leaf subframe-assignment {
+ type enumeration {
+ enum SAO {
+ description "subframe assignment configuration 0";
+ }
+ enum SA1 {
+ description "subframe assignment configuration 1";
+ }
+ enum SA2 {
+ description "subframe assignment configuration 2";
+ }
+ enum SA3 {
+ description "subframe assignment configuration 3";
+ }
+ enum SA4 {
+ description "subframe assignment configuration 4";
+ }
+ enum SA5 {
+ description "subframe assignment configuration 5";
+ }
+ enum SA6 {
+ description "subframe assignment configuration 6";
+ }
+ }
+ mandatory true;
+ description
+ "Indicates DL/UL subframe configuration as specified in
+ 3GPP TS 36.211 [v15.3.0, table 4.2-2]";
+ }
+ leaf special-subframe-pattern {
+ type enumeration {
+ enum SPP0 {
+ description "special subframe pattern configuration 0";
+ }
+ enum SPP1 {
+ description "special subframe pattern configuration 1";
+ }
+ enum SPP2 {
+ description "special subframe pattern configuration 2";
+ }
+ enum SPP3 {
+ description "special subframe pattern configuration 3";
+ }
+ enum SPP4 {
+ description "special subframe pattern configuration 4";
+ }
+ enum SPP5 {
+ description "special subframe pattern configuration 5";
+ }
+ enum SPP6 {
+ description "special subframe pattern configuration 6";
+ }
+ enum SPP7 {
+ description "special subframe pattern configuration 7";
+ }
+ enum SPP8 {
+ description "special subframe pattern configuration 8";
+ }
+ enum SPP9 {
+ description "special subframe pattern configuration 9";
+ }
+ enum SPP10 {
+ description "special subframe pattern configuration 10";
+ }
+ }
+ mandatory true;
+ description
+ "Indicates TDD special subframe configuration as in TS 36.211
+ [v15.3.0, table 4.2-1] ";
+ }
+ }
+
+ container laa-carrier-configuration {
+ when "../band-number = 46";
+ if-feature mcap:LAA;
+ description "Container to specify LAA feature related carrier configuration.";
+ uses laa-carrier-config;
+ }
+
+ leaf gain {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+
+ description
+ "Transmission gain in dB. Value applicable to each array element carrier belonging to array carrier.
+
+ The value of transmission gain shall meet the constraints defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ 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-carriers that have same frequency and bandwidth.
+ Note2: Unit is 1/1.2288e9 s. 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-carriers that have same frequency and bandwidth.";
+ }
+
+ leaf t-da-offset {
+ if-feature "feat:EXT-ANT-DELAY-CONTROL";
+ type uint32;
+ units Tc;
+ default 0;
+ description
+ "the time difference between the output of DL signal at the
+ antenna connector of O-RU and the transmission over the air.
+ units are Tc=~0.5ns=1/1.96608GHz.
+ An O-RU with 'ext-ant-delay-capability' = 'PER-O-RU' shall reject any configuration
+ where different values of t-da-offset are configured on tx-array-carriers;
+ An O-RU with 'ext-ant-delay-capability' = 'PER-ARRAY' shall reject any configuration
+ where different values of t-da-offset are configured on tx-array-carriers associated with the same tx-array.";
+ }
+
+ leaf reference-level {
+ if-feature TX-REFERENCE-LEVEL;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ default 0;
+ description
+ "Allows to adjust reference level for sum of IQ signal power over eAxCs in this array-carrier.";
+ }
+
+ leaf configurable-tdd-pattern {
+ when "not(/user-plane-configuration/low-level-tx-endpoints[name = string(/user-plane-configuration/low-level-tx-links[tx-array-carrier = current()/../name]/tx-array-carrier)]/configurable-tdd-pattern-supported = 'false')";
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/configurable-tdd-patterns/tdd-pattern-id";
+ }
+ description
+ "This parameter creates reference to configuration for TDD pattern applicable for particular tx-array-carrier.
+ The leaf may exist under tx-array-carrier only in case O-RU supports feature 'CONFIGURABLE-TDD-PATTERN-SUPPORTED'
+ AND all low-level-tx-endpoints linked to this tx-array-carrier have configurable-tdd-pattern-supported = 'true'";
+ }
+
+ leaf crb-to-prb-grid-offset {
+ if-feature "feat:PRG-SIZE-SUPP-SE-21-WITH-ST6 or feat:PRG-SIZE-SUPP-SE-21-WITH-ST5";
+ type uint16 {
+ range 0..2199;
+ }
+ default 0;
+ description
+ "This parameter specifies the value of 'offsetToCarier' parameter as specified in the 3GPP Specification TS 38.331.
+ This value is the offset in frequency domain, between lowest subcarrier of common RB 0, which is the start of
+ carrier resource Block(CRB grid) and the lowest usable subcarrier on this array-carrier, which is (RE0 of PRB0),
+ in units of number of PRBs (using the SCS defined for associated array-carrier). This parameter shall be used with
+ 'prgSize' in Section Extension 21 by the O-RU to correctly derive Channel Information Based Beamforming weights.
+ Value of this parameter is not interpretted by the O-RU, if either 'prg-size-supp-se-21-with-st6-enabled'
+ or 'prg-size-supp-se-21-with-st5-enabled' parameter is not set to TRUE by the O-DU.";
+ }
+ }
+
+ 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.";
+ }
+
+ list odu-ids {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "An optional list of o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a rx-array-carrier
+ associated with one or more particular odu-id(s).
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a single operator environment, where watchdog supervision is performed
+ on a per odu-id basis and supervision failure only results in a sub-set
+ of carriers beign de-activated.";
+
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "feat:SHARED-ORU-MULTI-ODU and feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "An optional list of sro and o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a rx-array-carrier
+ associated with one or more particular odu-id(s) operated by a particular sro-id.
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a multi operator environment, where watchdog supervision is performed on
+ a per odu-id basis and supervision failure only results in a sub-set of
+ carriers beign de-activated.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+
+ uses rx-common-array-carrier-elements;
+
+ 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-carriers that have same frequency and bandwidth.
+ Note2: Unit is 1/1.2288e9 s. 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-carriers that have same frequency and bandwidth.";
+ }
+
+ leaf gain-correction {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ mandatory true;
+ description
+ "Gain correction of RF path linked with array element or array layers.
+ Common part of overall gain_correction.
+ gain_correction = common array-carrier gain-correction + eAxC gain correction.";
+ }
+
+ leaf n-ta-offset {
+ type uint32;
+ units Tc;
+ mandatory true;
+ description
+ "Value of configurable N-TA offset
+ units are Tc=~0.5ns=1/1.96608GHz";
+ }
+
+ leaf t-au-offset {
+ if-feature "feat:EXT-ANT-DELAY-CONTROL";
+ type uint32;
+ units Tc;
+ default 0;
+ description
+ "the time difference between the reception over the air and
+ the input of UL signal at the antenna connector of O-RU.
+ units are Tc=~0.5ns=1/1.96608GHz.
+ An O-RU with 'ext-ant-delay-capability' = 'PER-O-RU' shall reject any configuration
+ where different values of t-au-offset are configured on rx-array-carriers;
+ An O-RU with 'ext-ant-delay-capability' = 'PER-ARRAY' shall reject any configuration
+ where different values of t-au-offset are configured on rx-array-carriers associated with the same rx-array.";
+ }
+
+ leaf configurable-tdd-pattern {
+ when "not(/user-plane-configuration/low-level-rx-endpoints[name = string(/user-plane-configuration/low-level-rx-links[rx-array-carrier = current()/../name]/rx-array-carrier)]/configurable-tdd-pattern-supported = 'false')";
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/configurable-tdd-patterns/tdd-pattern-id";
+ }
+ description
+ "This parameter creates reference to configuration for TDD pattern applicable for particular rx-array-carrier.
+ The leaf may exist under rx-array-carrier only in case O-RU supports feature 'CONFIGURABLE-TDD-PATTERN-SUPPORTED'
+ AND all low-level-rx-endpoints linked to this rx-array-carrier have configurable-tdd-pattern-supported = 'true'";
+ }
+
+ leaf user-group-mode {
+ if-feature "feat:USER-GROUP-SELF-ASSEMBLY";
+ type enumeration {
+ enum NO-SELF-ASSEMBLY {
+ description "No user group self assembly";
+ }
+ enum SELF-ASSEMBLY-WITH-GROUP-ID {
+ description "User group self assembly with group id.";
+ }
+ enum SELF-ASSEMBLY-WITHOUT-GROUP-ID {
+ description "User group self assembly without group id.";
+ }
+ }
+ default NO-SELF-ASSEMBLY;
+ description
+ "Configuration of user group self assembly.";
+ }
+
+ leaf point-a-offset-to-absolute-frequency-center {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER";
+ type int32;
+ description
+ "An offset between center-of-channel-bandwidth and Point A.
+ If the value is not provided, then Point A coincides with RE#0 of PRB#0 indicated by offset-to-absolute-frequency-center.
+ The unit of this parameter is 1/2 of reference SCS, where reference SCS is 15 kHz for FR1 and 60 kHz for FR2.
+
+ Please refer to CUS specification clause 7.7.24 for more details.";
+ }
+
+ leaf continuity-block-size-configured {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:CONTINUITY-BLOCK-SIZE";
+ type uint8;
+ description
+ "This parameter specified the O-DU configured value of continuity block size per rx-array-carrier.
+ The O-DU shall pick one of the values advertised by the O-RU in 'continuity-block-size-list'";
+ }
+
+ leaf port-reduced-dmrs-data-sending-enabled {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type boolean;
+ description
+ "This parameter value if set to TRUE indicates O-DU request to O-RU for sending port reduced DMRS
+ sending from O-RU. If the flag is set to FALSE indicates O-RU shall not send port reduced DMRS
+ from O-RU to O-DU.";
+ }
+
+ }
+
+ list tx-arrays {
+ key "name";
+ config false;
+ description
+ "Structure describing TX array parameters";
+
+ uses parameters;
+
+ leaf min-gain {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ description
+ "Min gain of RF path linked with array element (maximum over elements of array) or array layers";
+ }
+
+ leaf max-gain {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ mandatory true;
+ description
+ "Max gain of RF path linked with array element (minimum over elements of array) or array layers";
+ }
+
+ leaf independent-power-budget {
+ type boolean;
+ mandatory true;
+ description
+ "If true then every element of array has own, power budget independent from power budget of other elements.
+ Else all elements of array that are at same row and column and have same polarisation share power budget";
+ }
+
+ list capabilities {
+ description
+ "List of capabilities related to this tx-array";
+ uses mcap:support-for-dl;
+
+ container supported-energy-saving-capabilities-dl {
+ description
+ "Network energy saving capabilities supported in DL path";
+
+ container trx-control-capability-info {
+ if-feature feat:TRX-CONTROL;
+ description
+ "A container with parameters for TRX-CONTROL capabilities supported by the O-RU.";
+ uses mcap:trx-control-capability-info;
+ }
+
+ container asm-capability-info {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description
+ "A container with parameters for advanced sleep mode capabilities supported by the O-RU.";
+ uses mcap:asm-capability-info;
+ }
+ }
+ }
+ container mplane-trx-control-txarr-capability-info {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ description
+ "A container with parameters for MPLANE-TRX-CONTROL feature supported by the O-RU.";
+ uses mplane-trx-control-supp-antenna-masks;
+ }
+ }
+
+ list rx-arrays {
+ key "name";
+ config false;
+ description "Structure describing RX array parameters";
+
+ uses parameters;
+ container gain-correction-range {
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description "Array gain correction factor - maximum allowed value";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description "Array gain correction factor - minimum allowed value";
+ }
+
+ description
+ "Array gain correction factor";
+ }
+
+ list capabilities {
+ description
+ "List of capabilities related to this rx-array";
+ uses mcap:support-for-ul;
+
+ container supported-energy-saving-capabilities-ul {
+ description
+ "Network energy saving capabilities supported in UL path";
+
+ container trx-control-capability-info {
+ if-feature feat:TRX-CONTROL;
+ description
+ "A container with parameters for TRX-CONTROL capabilities supported by the O-RU";
+ uses mcap:trx-control-capability-info;
+ }
+
+ container asm-capability-info {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description
+ "A container with parameters for advanced sleep mode capabilities supported by the O-RU";
+ uses mcap:asm-capability-info;
+ }
+ }
+ }
+ container mplane-trx-control-rxarr-capability-info {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ description
+ "A container with parameters for MPLANE-TRX-CONTROL feature supported by the O-RU.";
+
+ uses mplane-trx-control-supp-antenna-masks;
+ }
+ }
+
+ list relations {
+ key "entity";
+ config false;
+ description "Structure describing relations between array elements";
+
+ leaf entity {
+ type uint16;
+
+ description
+ "Relation entity. Used as a key for list of relations.";
+ }
+
+ container array1 {
+ uses array-choice;
+
+ description
+ "Defines name for first array";
+ }
+ container array2 {
+ uses array-choice;
+
+ description
+ "Defines name for second array";
+ }
+ list types {
+ key "relation-type";
+ description
+ "Defines relation type and pairs for array elements for given arrays";
+
+ leaf relation-type {
+ type enumeration {
+ enum SHARED {
+ description "SHARED";
+ }
+ enum COALOCATED {
+ description "COALOCATED";
+ }
+ }
+ description "Type of relation between array elements";
+ }
+ list pairs {
+ key "element-array1";
+ description
+ "defines related array elements";
+
+ leaf element-array1 {
+ type uint16;
+
+ description
+ "Tells about id of element from array1";
+ }
+ leaf element-array2 {
+ type uint16;
+
+ description
+ "Tells about id of element from array2";
+ }
+ }
+ }
+ }
+
+ container eaxc-id-group-configuration {
+ if-feature mcap:EAXC-ID-GROUP-SUPPORTED;
+ description
+ "This is the container for eAxC ID group configuration.";
+ leaf max-num-tx-eaxc-id-groups {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-tx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "eaxc-id-group-configuration";
+ }
+ leaf max-num-tx-eaxc-ids-per-group {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-tx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "max-num-tx-eaxc-ids-per-group";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-rx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "max-num-rx-eaxc-id-groups";
+ }
+ leaf max-num-rx-eaxc-ids-per-group {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-rx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "max-num-rx-eaxc-ids-per-group";
+ }
+
+ list tx-eaxc-id-group {
+ must "count(../tx-eaxc-id-group) <= ../max-num-tx-eaxc-id-groups" {
+ error-message "too many tx-eaxcid-id groups";
+ }
+ key "representative-tx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs assigned to low-level-tx-endpoints.
+ Each group is a union of the 'member-tx-eaxc-id's and a 'representative-tx-eaxc-id'.
+ The low-level-tx-endpoint associated to 'representative-tx-eaxc-id' is able to
+ process the DL C-plane information for all the low-level-tx-endpoints associated
+ to 'member-tx-eaxc-id's.
+
+ Take Note: This list should only contain eAxC IDs assigned to a tx-endpoint.";
+
+
+ leaf representative-tx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-tx-eaxc-id'(s).";
+ }
+ leaf-list member-tx-eaxc-id {
+ type uint16;
+ must "count(../member-tx-eaxc-id) <= ../../max-num-tx-eaxc-ids-per-group" {
+ error-message "too many tx-eaxcid-id members";
+ }
+ must "current()!=../representative-tx-eaxc-id" {
+ error-message "the representative eaxcid does not need to be a list member";
+ }
+ ordered-by user;
+ description
+ "This is a list of member eAxC IDs, which together with the representative-tx-eaxc-id,
+ are assigned to low-level-tx-endpoints in the group.
+ This list is defined as 'ordered-by user', because the order of the eaxc-id list should be maintained,
+ and the parameters in the SE10 are applied to the eaxc-ids based on the order of eaxc-ids in the list
+ when the section extension conveys unique parameters (beamId/ueId) per eaxc-id.";
+ }
+ }
+
+ list rx-eaxc-id-group {
+ must "count(../rx-eaxc-id-group) <= ../max-num-rx-eaxc-id-groups" {
+ error-message "too many rx-eaxcid-id groups";
+ }
+ key "representative-rx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs assigned to low-level-rx-endpoints.
+ Each group is a union of 'member-rx-eaxc-id's and a 'representative-rx-eaxc-id'.
+ The low-level-rx-endpoint associated to 'representative-rx-eaxc-id' is able to
+ process the UL C-plane information for all the low-level-rx-endpoints associated
+ to 'member-rx-eaxc-id's.
+
+ Take Note: This list should only contain eAxC IDs assigned to a rx-endpoint.";
+
+ leaf representative-rx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-rx-eaxc-id'(s).";
+ }
+
+ leaf-list member-rx-eaxc-id {
+ type uint16;
+ must "count(../member-rx-eaxc-id) <= ../../max-num-rx-eaxc-ids-per-group" {
+ error-message "too many rx-eaxcid-id members";
+ }
+ must "current()!=../representative-rx-eaxc-id" {
+ error-message "the representative eaxc-id does not need to be a list member";
+ }
+ ordered-by user;
+ description
+ "This is a list of member eAxC IDs assigned to low-level-rx-endpoints in the group.
+ This list is defined as 'ordered-by user', because the order of the eaxc-id list should be maintained,
+ and the parameters in the SE10 are applied to the eaxc-ids based on the order of eaxc-ids in the list
+ when the section extension conveys unique parameters (beamId/ueId) per eaxc-id.";
+ }
+ }
+ }
+
+ list static-prach-configurations {
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ key static-prach-config-id;
+ description
+ "List of static PRACH configurations. An O-RU shall reject any configuration
+ modification which exceed the maximum permitted configurations supported by
+ the O-RU";
+
+ leaf static-prach-config-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in list of static PRACH configurations.";
+ }
+
+ uses static-prach-configuration;
+ }
+
+ grouping static-prach-configuration {
+ description
+ "Set of parameters related to static PRACH configuration";
+
+ leaf sfn-offset {
+ type uint32;
+
+ description
+ "This parameter is used for offsetting SFN value.
+ The SFN that results from the offset is used as the reference for the start of pattern periods.
+ If the value is not set, then pattern periods follow the reference set in a related rx-array-carrier.
+ The value is primarily used for cases in which pattern-period is not a power of 2.
+ Unit is in 10ms.";
+ }
+
+ leaf pattern-period {
+ type uint16 {
+ range 1..1024;
+ }
+ mandatory true;
+ description
+ "Period after which static PRACH patterns are repeated. Unit: number of frames.";
+ }
+
+ leaf guard-tone-low-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of REs occupied by the low guard tones.";
+ }
+
+ leaf num-prach-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of contiguous PRBs per data section description";
+ }
+
+ leaf guard-tone-high-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of REs occupied by the high guard tones.";
+ }
+
+ leaf sequence-duration {
+ type uint32 {
+ range 256..24576;
+ }
+ units Ts;
+ mandatory true;
+ description
+ "Duration of single PRACH Symbol. Refer to definition of PRACH Symbol in CUS specification clause 3.1.";
+ }
+
+ list prach-patterns {
+ key prach-pattern-id;
+ min-elements 1;
+ description
+ "Provides a PRACH pattern. Each record in the list represents a single PRACH occasion. Number of list entries cannot
+ exceed max-prach-patterns or extended-max-prach-patterns if EXTENDED-PRACH-CONFIGURATION is supported.";
+
+ leaf prach-pattern-id {
+ type uint32;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key for prach-pattern list.
+ NETCONF client shall limit its maximum value to 65535 when configuring
+ any O-RU that does not support the EXTENDED-PRACH-CONFIGURATION feature.";
+ }
+
+ leaf number-of-repetitions {
+ type uint8{
+ range 1..14;
+ }
+ mandatory true;
+ description
+ "This parameter defines number of PRACH PRACH Symbol repetitions in PRACH occasion,
+ to which the section control is applicable. Refer to definition of PRACH Symbol in CUS specification clause 3.1.";
+ }
+
+ leaf number-of-occasions {
+ type uint32;
+ mandatory true;
+ description
+ "This parameter informs how many consecutive PRACH occasions is described by the PRACH pattern.
+ NETCONF client shall limit its maximum value to 255 when configuring any O-RU that does not
+ support the EXTENDED-PRACH-CONFIGURATION feature.";
+ }
+
+ leaf re-offset {
+ type uint32;
+ mandatory true;
+ description
+ "Offset between the start of lowest-frequency RE of lowest-frequency PRB
+ and the start of lowest-frequency RE belonging to the PRACH occasion.
+ The re-offset is configured as number of PRACH REs.";
+ }
+
+ list occasion-parameters {
+ key occasion-id;
+ min-elements 1;
+ description
+ "This is list of cp-lengths, gp-lengths and beam-ids applicable
+ per each PRACH occasion in PRACH pattern.
+ Note: the number of records in this list MUST be equal
+ to value of parameter number-of-occasions.";
+
+ leaf occasion-id {
+ type uint32;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key in 'occasion-parameters' list.
+ The value is limited to 255 if EXTENDED-PRACH-CONFIGURATION is unsupported.";
+ }
+
+ leaf cp-length {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Cyclic prefix length. See CUS-plane specification for detailed description.";
+ }
+
+ leaf gp-length {
+ type uint16;
+ units Ts;
+ description
+ "Guard period length.";
+ }
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "This parameter defines the beam pattern to be applied to the U-Plane data.
+ beamId = 0 means no beamforming operation will be performed.";
+ }
+ }
+
+ leaf frame-number {
+ type uint16{
+ range 0..1023;
+ }
+ mandatory true;
+ description
+ "This parameter is an index inside the pattern-length, such that
+ PRACH occasion is happening for SFN which fulfills following equation:
+ [SFN mod pattern-length = frame-id]";
+ }
+
+ leaf sub-frame-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of sub-frame of the PRACH occasion. Value is interpreted in the same way
+ as subframeId field in a section description of a C-Plane message.";
+ }
+
+ leaf time-offset {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "This parameter defines the time-offset from the start of the sub-frame
+ to the start of the first Cyclic Prefix of PRACH pattern";
+ }
+ }
+ }
+
+ grouping static-srs-configuration {
+ description
+ "Set of parameters related to static PRACH configuration";
+
+ leaf pattern-period {
+ type uint16 {
+ range 1..1024;
+ }
+ mandatory true;
+ description
+ "Period after which static SRS patterns are repeated. Unit: number of frames.";
+ }
+
+ list srs-patterns {
+ key srs-pattern-id;
+ min-elements 1;
+ description
+ "Provides a SRS pattern. Each record in the list represents a single PRACH occasion. Number of list entries cannot exceed max-srs-patterns.";
+
+ leaf srs-pattern-id {
+ type uint16;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key for srs-pattern list.";
+ }
+
+ leaf sub-frame-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of sub-frame of the Raw SRS occasion. Value is interpreted in the same way
+ as subframeId field in a section description of a C-Plane message.";
+ }
+
+ leaf slot-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of slot of the Raw SRS occasion. Value is interpreted in the same way
+ as slotId field in a section description of a C-Plane message.";
+ }
+
+ leaf start-symbol-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of first symbol of the Raw SRS occasion. Value is interpreted in the same way
+ as startSymbolId field in a section description of a C-Plane message.";
+ }
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "This parameter defines the beam pattern to be applied to the U-Plane data.
+ beamId = 0 means no beamforming operation will be performed.";
+ }
+
+ leaf num-symbol {
+ type uint16;
+ mandatory true;
+ description
+ "This parameter defines number of consecutive symbols covered by specific srs-pattern.
+ Single srs-pattern may address at least one symbol. However, possible optimisations
+ could allow for several (up to 14) symbols.";
+ }
+
+ leaf start-prbc {
+ type uint16 {
+ range 0..1023;
+ }
+ mandatory true;
+ description
+ "Identifier of first PRB of the Raw SRS occasion. Value is interpreted in the same way
+ as startPrbc field in a section description of a C-Plane message.";
+ }
+
+ leaf num-prbc {
+ type uint16;
+ mandatory true;
+ description
+ "Number of PRBs of the Raw SRS occasion. Value is interpreted in the same way
+ as numPrbc field in a section description of a C-Plane message.";
+ }
+ }
+ }
+
+ grouping configurable-tdd-pattern {
+ description
+ "Set of parameters related to configurable TDD pattern.
+ Note: configurable-tdd-pattern shall not be used in case the usage would collide with
+ deprecated 'lte-tdd-pattern'.";
+
+ list switching-points {
+ key switching-point-id;
+ description
+ "List of switching points within frame, related to configurable TDD pattern.
+ An O-RU shall reject any configuration modification which exceeds the maximum
+ number of switching-points supported by the O-RU";
+
+ leaf switching-point-id {
+ type uint16;
+ description
+ "Supplementary parameter acting as key for switching-points list.";
+ }
+
+ leaf direction {
+ type enumeration {
+ enum UL {
+ description "Uplink";
+ }
+ enum DL {
+ description "Downlink";
+ }
+ enum GP {
+ description "Guard period";
+ }
+ }
+ mandatory true;
+ description
+ "Parameter provides information regarding desired signal direction at the moment switching point occurs.";
+ }
+
+ leaf frame-offset {
+ type uint32;
+ mandatory true;
+ description
+ "Offset from DL air frame boundary transmitted at RF connector to the point in time that is characteristic to the operation on RF switches. Unit is 1/1.2288e9 s.";
+ }
+ }
+ }
+
+ list static-srs-configurations {
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ key static-srs-config-id;
+ description
+ "List of static SRS configurations";
+
+ leaf static-srs-config-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in the list of static SRS configurations.";
+ }
+
+ uses static-srs-configuration;
+ }
+
+ list configurable-tdd-patterns {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ key tdd-pattern-id;
+ description
+ "List of configured TDD patterns";
+
+ leaf tdd-pattern-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in the list of configured TDD patterns.";
+ }
+
+ uses configurable-tdd-pattern;
+ }
+
+ list endpoint-bf-profile-group {
+ if-feature feat:BF-DELAY-PROFILE;
+ key "bf-profile-id";
+ config false;
+ description
+ "An optional list of list(s) containing beamforming methods supported by the O-RU with the associated delay-profile-id
+ per each beamforming method list";
+ leaf bf-profile-id {
+ type uint16;
+ description
+ "Identifies the beamforming method list.";
+ }
+ leaf-list supported-bf-methods {
+ type beamforming-method-type;
+ min-elements 1;
+ description
+ "Beamforming methods can be supported simultaneously.";
+ }
+ leaf supported-delay-profile {
+ type leafref {
+ path "/or-dm:delay-management/or-dm:non-default-ru-delay-profile/or-dm:delay-profile-id";
+ require-instance false;
+ }
+ description
+ "The delay-profile-id associated with the supported beamforming method list.
+ If not configured or the value is set to 0, all delay parameters shall be equivalent to the default value.";
+ }
+ }
+ list se10-member-candidate-tx-lists {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ key "id";
+ config false;
+ description
+ "List of leaf-lists, where each leaf-list is a member-candidate list comprising of endpoints
+ which can be associated to one or more static-low-level-tx-endpoint(s).";
+ leaf id {
+ type uint8;
+ description
+ "Index into the list se10-member-candidate-tx-lists.";
+ }
+ leaf-list member-candidates {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints/name";
+ require-instance false;
+ }
+ description
+ "Each leaf-list comprises one or more static-low-elevel-tx-endpoint(s). Endpoints in this list can
+ be representative endpoint or member endpoint.";
+ }
+ }
+ list se10-member-candidate-rx-lists {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ key "id";
+ config false;
+ description
+ "List of leaf-lists, where each leaf-list is a member-candidate list comprising of endpoints
+ which can be associated to one or more static-low-level-rx-endpoint(s).";
+ leaf id {
+ type uint8;
+ description
+ "Index into the list se10-member-candidate-rx-lists.";
+ }
+ leaf-list member-candidates {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints/name";
+ require-instance false;
+ }
+ description
+ "Each leaf-list comprises one or more static-low-elevel-rx-endpoint(s). Endpoints in this list can
+ be representative endpoint or member endpoint.";
+ }
+ }
+ }
+
+ grouping tx-array-notification-group {
+ description
+ "Grouping for tx-array for notification";
+
+ list tx-array-carriers{
+ key name;
+ description "notification of state change for tx-array-carriers";
+
+ leaf name{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/name";
+ }
+ description
+ "name of tx-array-carriers is notified at state change";
+ }
+ leaf state{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/state";
+ }
+ description
+ "state of tx-array-carriers is notified at state change";
+ }
+ leaf availability-status{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/availability-status";
+ }
+ description
+ "availability-status of tx-array-carriers is notified at availability-status change";
+ }
+ }
+ }
+
+ grouping rx-array-notification-group {
+ description
+ "Grouping for rx-array for notification";
+
+ list rx-array-carriers{
+ key name;
+ description
+ "Notification used to inform about state change of rx-array-carriers";
+ leaf name{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/name";
+ }
+ description
+ "name of rx-array-carriers is notified at state change";
+ }
+ leaf state{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/state";
+ }
+ description
+ "state of rx-array-carriers is notified at state change";
+ }
+ leaf availability-status{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/availability-status";
+ }
+ description
+ "availability-status of rx-array-carriers is notified at availability-status change";
+ }
+ }
+ }
+
+ // top level container
+ container user-plane-configuration {
+ description "top level container for user plane configuration";
+
+ uses uplane-conf-group;
+ uses general-config;
+ uses array-config-group;
+ }
+
+ //notification statement
+ notification tx-array-carriers-state-change {
+ description
+ "Notification used to inform about state change of tx-array-carriers";
+ uses tx-array-notification-group;
+ }
+ notification rx-array-carriers-state-change {
+ description
+ "Notification used to inform about state change of tx-array-carriers";
+
+ uses rx-array-notification-group;
+ }
+
+ notification data-layer-control-wakeup-notification {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ description
+ "Notification used to inform about wake-up completion after M-Plane based data layer control sleep is terminated";
+ leaf-list energy-sharing-group {
+ type uint8;
+ description
+ "Notification for wake-up completion of underlying HW components corresponding to energy sharing group.
+ This value shall be specific values from the list of 'energy-sharing-group-id' inside static-low-level-[tr]x-endpoints.";
+ }
+ }
+ notification mplane-trx-control-ant-mask-update {
+ if-feature feat:MPLANE-TRX-CONTROL;
+
+ leaf array-name {
+ type union {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ }
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ }
+ }
+ description
+ "The array name for which antenna mask has been updated using
+ MPLANE-TRX-CONTROL feature.";
+ }
+ leaf array-type {
+ type enumeration {
+ enum TX-ARRAY {
+ description
+ "this array is of type TX array";
+ }
+ enum RX-ARRAY {
+ description
+ "this array is of type RX array";
+ }
+ }
+ description
+ "The type of array for which antenna mask has been updated using
+ MPLANE-TRX-CONTROL feature.";
+ }
+ leaf updated-antenna-mask {
+ type binary;
+ description
+ "The updated antenna mask value after processing M-Plane based TRX control command at the O-RU.
+ If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask shall be used for notification.
+ The parameter antenna-bitmask-index shall not be used for notification.";
+ }
+ leaf updated-antenna-mask-index {
+ type uint8;
+ description
+ "The parameter indicates updated antenna mask index value after processing M-Plane based TRX control command at the O-RU.
+ If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index shall be used for notification to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for notification.";
+ }
+ description
+ "M-Plane notification event to notify that the commanded mask has been activated via M-plane. This notification
+ is required to be sent for either tx-array or rx-array for which the antenna mask was
+ commanded to be changed by the O-DU.";
+ }
+}
--- /dev/null
+<users xmlns="urn:o-ran:user-mgmt:1.0">
+ <user>
+ <name>oranuser</name>
+ <enabled>true</enabled>
+ </user>
+</users>
--- /dev/null
+module o-ran-usermgmt {
+ yang-version 1.1;
+ namespace "urn:o-ran:user-mgmt:1.0";
+ prefix "o-ran-usermgmt";
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import ietf-crypto-types {
+ prefix ct;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the user management model for the O-RAN Equipment.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add SSH Public Key.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 10.1.0
+
+ 1) clarify handling of User-Names.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced SHARED-ORU-MULTI-OPERATOR feature.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) typographical corrections in descriptions";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 1.2.0
+
+ 1) updated description for enabled leaf";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) change name leaf to type nacm:user-name-type
+ 2) added account-type to qualify when password is required ";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ 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.
+ 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.
+
+ When a password is received by a NETCONF server,
+ it should be securely stored in the O-RU's configuration datastore.
+ How to securely store the password in the datastore is implementation-specific
+ and out of scope of WG4 M-Plane specification.";
+ }
+
+ grouping user-list {
+ description "a user list grouping";
+ list user {
+ key "name";
+ description
+ "The list of local users configured on this device.";
+ leaf name {
+ type nacm:user-name-type;
+ description
+ "The user name string identifying this entry.
+
+ NOTE: o-ran-usermgmt:user-profile/user/name is
+ identical to nacm:nacm/groups/group/user-name
+ but the current schema is preserved for backwards
+ compatibility.";
+ }
+ leaf account-type {
+ type enumeration {
+ enum PASSWORD {
+ description "the user-name is for password based authentication";
+ }
+ enum CERTIFICATE {
+ description "the user-name is for certificate based authentication";
+ }
+ enum SSHPUBLICKEY {
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ description "the user-name is for public key based authentication";
+ }
+ }
+ default "PASSWORD";
+ description "the account type";
+ }
+
+ leaf password {
+ nacm:default-deny-all;
+ type password-type;
+ description
+ "The password for this entry.
+
+ This field is only valid when account-type is PASSWORD,
+ i.e., when account-type is NOT present or present and set to
+ PASSWORD.";
+ }
+
+ container ssh-public-key {
+ nacm:default-deny-all;
+ when "../account-type='SSHPUBLICKEY'";
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ uses ct:public-key-grouping;
+ description
+ "The SSH pubic key for this entry.
+
+ This field is valid only when account-type is SSHPUBLICKEY.";
+ }
+
+ leaf enabled {
+ type boolean;
+ description
+ "Indicates whether an account is enabled or disabled.
+
+ A NETCONF Server shall reject a configuration that attempts to
+ enable a Password account for an account where the password leaf
+ is not configured.
+
+ This validation statement is included in the YANG description and
+ not in a MUST statement to preserve backwards compatibility.";
+ }
+ leaf-list sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type string;
+ description
+ "An optional list if Shared Resource Operator identities associated with the
+ user-account. Used to realize enhanced access privileges in a shared O-RU.
+ When an sro-id is configured in the O-RU, the O-RU shall
+ implement additional sro-id based NETCONF access control
+ as specified in O-RAN.WG4.MP.0-v10.00.
+ The O-RU does not further interpret the specific value of sro-id.";
+ }
+ }
+ }
+
+ container users {
+ must "user/enabled='true'" {
+ error-message "At least one account needs to be enabled.";
+ }
+ //TAKE NOTE - any configuration with zero enabled users is invalid.
+ //This will typically be the case when using a simulated NETCONF Server
+ //and so this constraint should be removed when operating in those scenarios
+
+ //The config data base of the O-RAN equipment should ensure that the user
+ //default account is enabled on factory restart
+
+ description "list of user accounts";
+ uses user-list;
+ }
+
+ rpc chg-password {
+ description "the RPC used to change a password";
+ nacm:default-deny-all;
+ 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;
+ description "change password operation is successful";
+ }
+ enum "Failed" {
+ value 2;
+ description "change password operation failed";
+ }
+ }
+ mandatory true;
+ description
+ "Successful or Failed";
+ }
+ leaf status-message {
+ type string;
+ description
+ "Gives a more detailed reason for success / failure";
+ }
+ }
+ }
+
+ rpc chg-ssh-public-key {
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ description "the RPC used to change SSH public key";
+ nacm:default-deny-all;
+ input {
+ container current-ssh-public-key {
+ uses ct:public-key-grouping;
+ description
+ "provide the current SSH public algorithm and key";
+ }
+ container new-ssh-public-key {
+ uses ct:public-key-grouping;
+ description
+ "provide a new SSH public algorithm and key";
+ }
+ container new-ssh-public-key-confirm {
+ uses ct:public-key-grouping;
+ description
+ "re-enter the new SSH public algorithm and key";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum "Successful" {
+ value 1;
+ description "change SSH public key operation is successful";
+ }
+ enum "Failed" {
+ value 2;
+ description "change SSH public key operation failed";
+ }
+ }
+ mandatory true;
+ description
+ "Successful or Failed";
+ }
+ leaf status-message {
+ type string;
+ description
+ "Gives a more detailed reason for success / failure";
+ }
+ }
+ }
+
+}
--- /dev/null
+module o-ran-ves-subscribed-notifications {
+ yang-version 1.1;
+ namespace "urn:o-ran:ves-sn:1.0";
+ prefix o-ran-vsn;
+
+ import ietf-subscribed-notifications {
+ prefix sn;
+ }
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines augmentations to ietf-subscribed-notifications to
+ enable support of configured notifications sent using VNF Event Stream
+ notifications.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ // identity statements
+ identity o-ran-ves-connectionless {
+ base sn:transport;
+ description
+ "A transport type used to indicate that notifications should be sent using an
+ ONAP VES Notification using RESTful connectionless transport";
+ }
+
+ grouping event-collector {
+ description
+ "Provides a reusable description of an event-collector.";
+ leaf notification-recipient {
+ type inet:uri;
+ mandatory true;
+ description
+ "This URI specifies the address of the notification receiver
+ HTTPS endpoint. Additional path elements may be added as required by the
+ protocol, i. e. it configures the server root.
+ E.g. https://myserver.mydomain.com:8443/notifications.";
+ }
+ }
+
+ augment "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
+ when "(derived-from-or-self(../../sn:transport, 'o-ran-vsn:o-ran-ves-connectionless'))";
+ description
+ "This augmentation allows VES-specific receiver parameters to be
+ configured.";
+ uses event-collector;
+ }
+}
--- /dev/null
+module o-ran-wg4-features {
+ yang-version 1.1;
+ namespace "urn:o-ran:wg4feat:1.0";
+ prefix "o-ran-feat";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the set of re-usable type definitions for WG4 specific
+ features.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+ new features:
+
+ 1) PRG-SIZE-SUPP-SE-21-WITH-ST6
+ 2) PRG-SIZE-SUPP-SE-21-WITH-ST5
+ 3) USER-GROUP-OPTIMIZATION
+ 4) BF-DELAY-PROFILE
+ 5) DMRS-BF-EQ
+ 6) DMRS-BF-NEQ
+ 7) RRM-MEAS-REPORTING
+ 8) USER-GROUP-SELF-ASSEMBLY
+ 9) UEID-PERSISTENCE
+ 10) CONTINUITY-BLOCK-SIZE
+ 11) SELECTED-BF-METHOD-CONFIGURATION
+ 12) DMRS-BF-NEQ-UNALTERED-FREQ-OFFSET
+ 13) DMRS-BF-NEQ-UNALTERED-TAE
+ 14) SE10-MEMBER-CANDIDATE-LIST
+ 15) MACSEC-BYPASS-POLICY
+ 16) SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION
+ 17) SE20-MULTI-SD-PUNC-PATTERN-SUPPORT
+ 18) CONFIGURABLE-VSWR-THRESHOLDS
+ 19) CLIENT-AUTH-SSH-PUBLIC-KEY
+ 20) POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+ new features:
+
+ 1) PRG-SIZE-SUPP-SE-21-WITH-ST6
+ 2) PRG-SIZE-SUPP-SE-21-WITH-ST5
+ 3) BF-DELAY-PROFILE
+ 4) USER-GROUP-OPTIMIZATION
+ 5) MULTIPLE-BEAMID-TABLES-SUPPORTED
+ 6) PER-PORT-PTP-CONFIG
+ 7) PER-PORT-SYNCE-CONFIG
+ 8) MPLANE-TRX-CONTROL
+ 9) PER-INT-TCP-MSS
+ 10) DEEP-HIBERNATE";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+ new features:
+
+ 1) SE23-PRB-BLOCK-MODE-SUPPORT
+ 2) MPLANE-DATA-LAYER-CONTROL
+ 3) SHARED-CELL-STATS";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+ new features:
+
+ 1) CALL-HOME-REACTIVATION-SUPPORTED
+ 2) SEQ-ID-CHECKING-CONFIGURABLE
+ 3) TRX-CONTROL
+ 4) ADVANCED-SLEEP-MODE";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+ new features:
+
+ 1) EXTENDED-PRACH-CONFIGURATION
+ 2) NON-SCHEDULED-UEID
+ 3) SE11-WITH-CONTINUITY-BIT-SUPPORT
+ 4) UPLANE-MESSAGE-PROCESSING-LIMITS";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+ new features:
+
+ 1) UPLANE-ONLY-DL-MODE
+ 2) SUPERVISION-WITH-SESSION-ID
+ 3) INTEGRITY-CHECK-AT-SW-DOWNLOAD
+ 4) ST4-SLOT-CONFIG-MSG-SUPPORT";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+ new features:
+ 1) SHARED-ORU-MULTI-ODU
+ 2) SHARED-ORU-MULTI-OPERATOR";
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+ new features:
+ 1) Typographical corrections in descriptions
+ 2) Add new features:
+ BEAM-UPDATE-CONTENTION-CONTROL
+ MULTIPLE-SCS-IN-EAXC
+ ENHANCED-T-COMBINE
+ CHANNEL-INFORMATION-COMPRESSION
+ CHANNEL-INFORMATION-PRB-GROUP
+ MULTIPLE-TRANSPORT-SESSION-TYPE";
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ new features:
+ 1) EXT-ANT-DELAY-CONTRO
+ 2) CPLANE-MESSAGE-PROCESSING-LIMITS";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) Features added to handle updated transmission window control:
+ STATIC-TRANSMISSION-WINDOW-CONTROL
+ DYNAMIC-TRANSMISSION-WINDOW-CONTROL
+ UNIFORMLY-DISTRIBUTED-TRANSMISSION
+ ORDERED-TRANSMISSION
+ INDEPENDENT-TRANSMISSION-WINDOW-CONTROL
+ ";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) initial version.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ feature NON-PERSISTENT-MPLANE {
+ description
+ "Indicates that the Radio Unit supports the optional
+ capability to improve the operation with a SMO using a non-
+ persistent NETCONF session.";
+ }
+
+ feature STATIC-TRANSMISSION-WINDOW-CONTROL {
+ description
+ "O-RU supports U-plane transmission window control (scheduled transmission
+ and optionally uniformly distributed transmission) configuration over M-plane";
+ }
+
+ feature DYNAMIC-TRANSMISSION-WINDOW-CONTROL {
+ description
+ "O-RU supports U-plane transmission window control (scheduled transmission
+ and optionally uniformly distributed transmission) configuration over C-plane";
+ }
+
+ feature UNIFORMLY-DISTRIBUTED-TRANSMISSION {
+ if-feature "STATIC-TRANSMISSION-WINDOW-CONTROL or DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ description
+ "O-RU supports transmission of UL U-plane messages distributed uniformly over transmission window.";
+ }
+
+ feature ORDERED-TRANSMISSION {
+ description
+ "O-RU supports ordered transmission";
+ }
+
+ feature INDEPENDENT-TRANSMISSION-WINDOW-CONTROL {
+ if-feature "STATIC-TRANSMISSION-WINDOW-CONTROL or DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ description
+ "O-RU supports independent U-plane transmission window per endpoint.
+
+ If this feature is not supported then for all endpoints with transmission control enabled
+ (see u-plane-transmission-control/transmission-window-control) must be configured for transmission
+ window offsets and window sizes that coincide for each symbol.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is not supported then all endpoints with
+ transmission control enabled that handle the same carrier type and SCS must be configured
+ (via M-plane or C-plane) with parameter values resulting in transmission windows that coincide
+ between the endpoints. That is, for every symbol N, the effective transmission window for symbol N
+ must be shared (start at the same time and end at the same time) by all the endpoints handling
+ same carrier type and SCS. This restriction applies only to endpoints that have transmission
+ control enabled.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is supported then restriction described
+ above does not apply and a different transmission window (window offset and window size)
+ can be used for every endpoint capable of transmission window control.";
+ }
+
+ feature EXT-ANT-DELAY-CONTROL {
+ description
+ "This feature indicates that the O-RU supports external antenna delay control";
+ }
+
+ feature CPLANE-MESSAGE-PROCESSING-LIMITS {
+ description
+ "Feature to indicate O-RU limitation of C-Plane message processing. Refer CUS-Plane specification
+ section 'O-RU C-Plane message limits' for more details on this feature.";
+ }
+
+ feature CHANNEL-INFORMATION-COMPRESSION {
+ description
+ "This feature indicates that the O-RU supports channel information compression.";
+ }
+
+ feature CHANNEL-INFORMATION-PRB-GROUP {
+ description
+ "Feature to indicate O-RU supports receiving and processing channel
+ information (e.g., ST6) with PRB group size greater than one PRB";
+ }
+
+ feature BEAM-UPDATE-CONTENTION-CONTROL {
+ description
+ "Feature to indicate O-RU requirements for beam weight update for a given beamId, to avoid beam update contentions.
+ Refer CUS-Plane specification section 'Weight-based dynamic beamforming' for more details on this feature.";
+ }
+
+ feature MULTIPLE-SCS-IN-EAXC {
+ description
+ "Presence of feature indicates that FHM supports combining for multiple SCS
+ or multiple c-plane-types/frameStructure in a single eAxC-id in UL direction.";
+ }
+
+ feature MULTIPLE-TRANSPORT-SESSION-TYPE {
+ description
+ "Feature to indicate O-RU supports to be configured with multiple transport-session-type
+ (Ethernet, ALIASMAC, UDP/IP)";
+ }
+
+ feature ENHANCED-T-COMBINE {
+ description
+ "Presence of feature indicates that FHM/Cascade O-RU can support t-combine-net and tx-duration";
+ }
+
+ feature SHARED-ORU-MULTI-OPERATOR {
+ description
+ "Feature to indicate the O-RU supports shared operation with one or more shared
+ resource operators (i.e., multiple MNOs) and implements enhanced NACM privileges per shared
+ resource operator.
+
+ Note, there is no linkage or dependency between the SHARED-CELL feature and the SHARED-ORU feature.";
+ }
+
+ feature SHARED-ORU-MULTI-ODU {
+ description
+ "Feature to indicate the O-RU supports independent supervision qualified based on odu-id, where
+ loss of supervision triggers selective carrier deactivation of carriers associated with odu-id.";
+ }
+
+ feature INTEGRITY-CHECK-AT-SW-DOWNLOAD {
+ description "Feature indicates that radio unit support performing integrity check at software download";
+ }
+
+ feature SUPERVISION-WITH-SESSION-ID {
+ description
+ "O-RUs supporting this feature reuse the session-id generated for each NETCONF
+ session in supervision-notification. The session-id is defined in RFC 6241.
+ For these O-RUs, the O-RU controller participating in the NETCONF supervision
+ procedure can subscribe to supervision-notification notification events,
+ filtering for the supervision-notification/session-id matching
+ session-id in the Hello Message received from NETCONF Server earlier.";
+ }
+
+ feature UPLANE-ONLY-DL-MODE {
+ description
+ "Presence of feature indicates that O-RU supports U-Plane-only DL mode.";
+ }
+
+ feature ST4-SLOT-CONFIG-MSG-SUPPORT {
+ description
+ "Feature to indicate O-RU support for Section Type 4 slot configuration message";
+ }
+ feature NON-SCHEDULED-UEID {
+ description
+ "Feature to indicate that O-RU supports 'non-scheduled-ueid' to indicate the ports in the section which are not scheduled for a given eAxcid";
+ }
+
+ feature EXTENDED-PRACH-CONFIGURATION {
+ description
+ "Presence of the feature indicates that O-RU supports extended number of PRACH patterns and occasions
+ provided by means of static PRACH.";
+ }
+
+ feature SE11-WITH-CONTINUITY-BIT-SUPPORT {
+ description
+ "Feature to indicate O-RU support for handling 'continuity' bit information in Section Extension 11";
+ }
+
+ feature UPLANE-MESSAGE-PROCESSING-LIMITS {
+ description
+ "Feature to indicate O-RU limitation of U-Plane message processing. Refer M-Plane specification
+ clause 15.10 for more details on this feature.";
+ }
+
+ feature CALL-HOME-REACTIVATION-SUPPORTED {
+ description
+ "Presence of the feature indicates that O-RU supports re-activation of timed out call home flows.";
+ }
+
+ feature SEQ-ID-CHECKING-CONFIGURABLE {
+ description
+ "Feature to indicate O-RU supports configuration of sequence number checking functionality.";
+ }
+
+ feature TRX-CONTROL {
+ description
+ "Feature to indicate O-RU support for handling RF channel reconfiguration by TRX Control.";
+ }
+
+ feature ADVANCED-SLEEP-MODE {
+ description
+ "Feature to indicate O-RU support for handling Advanced Sleep Modes.";
+ }
+
+ feature SE23-PRB-BLOCK-MODE-SUPPORT {
+ description
+ "Presence of the feature indicates that O-RU supports PRB-BLOCK mode of SE-23 as defined in CUS-Plane
+ specification Clause 7.7.23.1.";
+ }
+
+ feature MPLANE-DATA-LAYER-CONTROL {
+ description
+ "Feature to indicate O-RU support for M-Plane based data layer control energy saving feature.";
+ }
+
+ feature SHARED-CELL-STATS {
+ description
+ "Feature to indicate FHM/Cascade O-RU support for shared-cell-stats.";
+ }
+
+ feature PER-PORT-PTP-CONFIG {
+ description
+ "This feature indicates that the equipment supports per-port PTP configuration functionality";
+ }
+
+ feature PER-PORT-SYNCE-CONFIG {
+ description
+ "This feature indicates that the equipment supports per-port SYNCE configuration functionality";
+ }
+
+ feature PER-INT-TCP-MSS {
+ description
+ "This feature indicates that the RU supports a per-interfacece MSS
+ configuration for TCP.";
+ }
+
+ feature MULTIPLE-BEAMID-TABLES-SUPPORTED {
+ description
+ "Feature to indicate O-RU support for multiple beamId tables.";
+ }
+
+ feature MPLANE-TRX-CONTROL {
+ description
+ "Feature to indicate O-RU support for M-plane based TRX control for Network Energy Saving.";
+ }
+
+ feature DEEP-HIBERNATE {
+ description
+ "Feature to indicate O-RU support for M-Plane based deep-hibernate energy saving feature.";
+ }
+
+ feature PRG-SIZE-SUPP-SE-21-WITH-ST6 {
+ description
+ "Feature to indicate O-RU support for receiving prgSize information when Section Extension 21 is
+ sent with Section Type 6.";
+ }
+
+ feature PRG-SIZE-SUPP-SE-21-WITH-ST5 {
+ description
+ "Feature to indicate O-RU support for receiving prgSize information when Section Extension 21 is
+ sent with Section Type 5.";
+ }
+
+ feature USER-GROUP-OPTIMIZATION {
+ description
+ "Feature to indicate O-DU requirement to send all layers for a given user group i.e., UEs with same
+ time-frequency allocation using single C-Plane section description.";
+ }
+
+ feature BF-DELAY-PROFILE {
+ description
+ "Feature to indicate O-RU support for beamforming list and delay profiles(s) per endpoint.";
+ }
+
+ feature DMRS-BF-EQ {
+ description
+ "DMRS beamforming with equalization supported. See CUS-plane clause 12.6";
+ }
+
+ feature DMRS-BF-NEQ {
+ description
+ "DMRS beamforming without equalization supported. See CUS-plane clause 12.6";
+ }
+
+ feature RRM-MEAS-REPORTING {
+ description
+ "Reporting of RRM measurmenets supported. See CUS-plane clause 12.6.1.6";
+ }
+
+ feature USER-GROUP-SELF-ASSEMBLY {
+ description
+ "Feature to indicate user group self assembly. See CUS-Plane clause 7.7.24.7.";
+ }
+
+ feature UEID-PERSISTENCE {
+ description
+ "Feature to indicate if ueId persistance over multiple slots is supported. See CUS-Plane clause 7.7.24.10.";
+ }
+
+ feature CONTINUITY-BLOCK-SIZE {
+ description
+ "The O-RUs capability for reporting one or more values of continuity block sizes. See CUS-plane clause 12.6.1.2.1";
+ }
+
+ feature SELECTED-BF-METHOD-CONFIGURATION {
+ description
+ "Feature to indicate O-RU support for configuration of a subset of beamforming methods from an
+ endpoint-bf-profile-group that shall be used by a specific endpoint.";
+ }
+
+ feature DMRS-BF-NEQ-UNALTERED-FREQ-OFFSET {
+ description
+ "Feature to indicate that DMRS-BF-NEQ beamforming performed by the O-RU does not change frequency offset,
+ hence it can be measured by the O-DU.";
+ }
+
+ feature DMRS-BF-NEQ-UNALTERED-TAE {
+ description
+ "Feature to indicate that DMRS-BF-NEQ beamforming performed by the O-RU does not change TAE,
+ hence TAE can be measured by the O-DU. Refer CUS specification clause 9.2.2.1 for details.";
+ }
+
+ feature SE10-MEMBER-CANDIDATE-LIST {
+ description
+ "Reporting of member-list of endpoints for SE-10 supporting endpoint. See CUS-plane clause 7.7.10.1";
+ }
+
+ feature MACSEC-BYPASS-POLICY {
+ description
+ "O-RU supports MACsec bypass policy";
+ }
+
+ feature SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION {
+ description
+ "Presence of the feature indicates that O-RU supports O-DU controlled dimensionality reduction using SE27 as defined in CUS-Plane
+ specification Clause 7.7.27.";
+ }
+
+ feature SE20-MULTI-SD-PUNC-PATTERN-SUPPORT {
+ description
+ "Feature to indicate O-RU support for handling multiple section description puncturing pattern in
+ Section Extension 20 per endpoint.";
+ }
+
+ feature CONFIGURABLE-VSWR-THRESHOLDS {
+ description
+ "Feature to indicate O-RU support for configurable VSWR thresholds.";
+ }
+
+ feature CLIENT-AUTH-SSH-PUBLIC-KEY {
+ description
+ "O-RU supports an optional feature to authenticate SSH client via SSHPUBLICKEY method.";
+ }
+
+ feature POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER {
+ description
+ "Feature to indicate if leaf rx-array-carriers/point-a-offset-to-absolute-frequency-center is supported. See CUS-Plane clause 7.7.24.1.";
+ }
+}
--- /dev/null
+module o-ran-wg5-delay-management {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:wg5-delay:1.0";\r
+ prefix "o-ran-wg5-delay";\r
+\r
+ import o-ran-operations {\r
+ prefix "or-ops";\r
+ }\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module is for supporting WG4 Fronthaul delay management support between O-DU and O-RU.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+ typedef ru-ref {\r
+ type leafref {\r
+ path "/or-ops:operational-info/or-ops:declarations/or-ops:ru-instance-id";\r
+ }\r
+ description\r
+ "A type defintion for the ru-instance-id. Although the type used in\r
+ o-ran-operations is only a 'string', this leafref is used to indicate\r
+ that the type 'ru-ref' is used to encode ru-instance-id values.\r
+\r
+ These will typically have been recovered using the NETCONF client in an\r
+ O-DU which has a NETCONF session with an O-RU which implements the\r
+ o-ran-operations.yang model. ";\r
+ }\r
+\r
+typedef bandwidth {\r
+ type uint32 {\r
+ range "200 | 1400 | 3000 | 5000 | 10000 | 15000 | 20000 | 25000 |\r
+ 30000 | 40000 | 50000 | 60000 | 70000 | 80000 | 90000 | 100000\r
+ | 200000 | 400000" ;\r
+ }\r
+ units kilohertz;\r
+ description\r
+ "transmission bandwidth configuration in units of kHz -\r
+ covering NBIoT through to New Radio - see 38.104";\r
+}\r
+\r
+grouping bandwidth-configuration {\r
+ description\r
+ "Grouping for bandwidth and scs configuration";\r
+\r
+ leaf bandwidth {\r
+ type bandwidth;\r
+ description\r
+ "transmission bandwidth configuration in units of kHz -\r
+ covering NBIoT through to New Radio - see 38.104";\r
+ }\r
+ leaf subcarrier-spacing {\r
+ type uint32 {\r
+ range "0 .. 240000 ";\r
+ }\r
+ units Hertz;\r
+ description "subcarrier spacing in Hz";\r
+ }\r
+}\r
+\r
+grouping window-determine-method-group {\r
+ container window-determine-method {\r
+ description\r
+ "the container for configuring the window determination method to O-DU";\r
+ leaf method {\r
+ type enumeration {\r
+ enum HARDCODED {\r
+ status deprecated;\r
+ description\r
+ "O-DU transmission/reception window is determined by O-DU\r
+ NOTE: Deprecated as it doesn't match the O-RAN.WG5.O-DU-O1.0-v05.00 specification.";\r
+ }\r
+ enum NOT_CONFIGURED {\r
+ description\r
+ "O-DU transmission/reception window is determined by O-DU";\r
+ }\r
+ enum CONFIGURED {\r
+ description\r
+ "O-DU transmission/reception window is determined by configured value from SMO";\r
+ }\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Method for determination of O-DU transmission/reception";\r
+ }\r
+ \r
+ leaf configuration-status {\r
+ type leafref {\r
+ path "/wg5-delay-management/window-determine-capability";\r
+ require-instance false;\r
+ }\r
+ mandatory true;\r
+ description\r
+ "Parameter representing status of configuration to be used as validator";\r
+ }\r
+\r
+ list pre-configured-transport-delay {\r
+ when "../method = 'NOT_CONFIGURED'";\r
+ key ru-instance-id;\r
+ description\r
+ "a list of pre-configured-transport-delay. This list is configured only in case of NOT_CONFIGURED";\r
+\r
+ leaf ru-instance-id {\r
+ type ru-ref;\r
+ }\r
+\r
+ leaf t12-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the pre-configured minimum measured delay between DU port-ID and O-RU port-ID";\r
+ }\r
+ leaf t12-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the pre-configured maximum measured delay between CU port-ID and O-RU port-ID";\r
+ }\r
+ leaf t34-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the pre-configured minimum measured delay between O-RU port-ID and CU port-ID";\r
+ }\r
+ leaf t34-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the pre-configured maximum measured delay between O-RU port-ID and CU port-ID";\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+ grouping window-determine-information-group {\r
+ leaf window-determine-capability {\r
+ type enumeration {\r
+ enum NOT_CONFIGURED {\r
+ description\r
+ "O-DU transmission/reception window can be determined by O-DU";\r
+ }\r
+ enum CONFIGURED {\r
+ description\r
+ "O-DU transmission/reception window can be determined by configured value from SMO";\r
+ }\r
+ enum BOTH {\r
+ description\r
+ "O-DU has both capability, NOT_CONFIGURED and CONFIGURED";\r
+ }\r
+ }\r
+ config false;\r
+ mandatory true;\r
+ description\r
+ "Capability how O-DU transmission/reception window can be determined";\r
+ }\r
+ uses window-determine-method-group;\r
+ }\r
+\r
+ grouping o-du-window-group {\r
+ list o-du-window {\r
+ key "ru-instance-id bandwidth subcarrier-spacing";\r
+ description\r
+ "a list of o-du-window";\r
+\r
+ leaf ru-instance-id {\r
+ type ru-ref;\r
+ }\r
+ uses bandwidth-configuration;\r
+\r
+ leaf ta4-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest possible time which the O-DU can support receiving the\r
+ first uplink user plane IQ data message for a symbol.";\r
+ }\r
+ leaf ta4-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the latest possible time which the O-DU can support receiving the\r
+ last uplink user plane IQ data message for a symbol.";\r
+ }\r
+ leaf t1a-min-cp-dl {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the latest possible time which the O-DU can support transmiting\r
+ an control plane prior to transmission of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ leaf t1a-min-cp-ul {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the latest possible time which the O-DU can support transmiting\r
+ an control plane prior to reception of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ leaf t1a-min-up {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the latest possible time which the O-DU can support transmiting\r
+ an IQ data message prior to transmission of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ leaf t1a-max-cp-dl {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest possible time which the O-DU can support transmiting\r
+ an control plane prior to transmission of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ leaf t1a-max-cp-ul {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest possible time which the O-DU can support transmiting\r
+ an control plane prior to reception of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ leaf t1a-max-up {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest possible time which the O-DU can support transmiting\r
+ an IQ data message prior to transmission of the corresponding IQ\r
+ samples at the antenna";\r
+ }\r
+ }\r
+}\r
+\r
+ grouping o-ru-window-group {\r
+ list o-ru-window {\r
+ key "ru-instance-id bandwidth subcarrier-spacing";\r
+ description\r
+ "a list of o-ru-window";\r
+ config false;\r
+\r
+ leaf ru-instance-id {\r
+ type ru-ref;\r
+ config false;\r
+ }\r
+ uses bandwidth-configuration;\r
+\r
+ leaf t2a-min-up {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum O-RU data processing delay between receiving IQ data\r
+ message over the fronthaul interface and transmitting\r
+ the corresponding first IQ sample at the antenna";\r
+ }\r
+ leaf t2a-max-up {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest allowable time when a data packet is received before\r
+ the corresponding first IQ sample is transmitted at the antenna";\r
+ }\r
+ leaf t2a-min-cp-dl {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum O-RU data processing delay between receiving downlink\r
+ real time control plane message over the fronthaul interface and\r
+ transmitting the corresponding first IQ sample at the antenna";\r
+ }\r
+ leaf t2a-max-cp-dl {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest allowable time when a downlink real time control message\r
+ is received before the corresponding first IQ sample is transmitted at\r
+ the antenna";\r
+ }\r
+ leaf tcp-adv-dl {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the time difference (advance) between the reception window for\r
+ downlink real time Control messages and reception window for the\r
+ corresponding IQ data messages.";\r
+ }\r
+ leaf ta3-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum O-RU data processing delay between receiving an IQ sample\r
+ at the antenna and transmitting the first data sample over the\r
+ fronthaul interface";\r
+ }\r
+ leaf ta3-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the maximum O-RU data processing delay between receiving an IQ sample\r
+ at the antenna and transmitting the last data sample over the\r
+ fronthaul interface";\r
+ }\r
+ leaf t2a-min-cp-ul {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum O-RU data processing delay between receiving real time\r
+ up-link control plane message over the fronthaul interface and\r
+ recieving the first IQ sample at the antenna";\r
+ }\r
+ leaf t2a-max-cp-ul {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the earliest allowable time when a real time up-link control message\r
+ is received before the corresponding first IQ sample is received at\r
+ the antenna";\r
+ }\r
+ }\r
+}\r
+\r
+ grouping measured-transport-delay-group {\r
+ list measured-transport-delay {\r
+ key ru-instance-id;\r
+ config false;\r
+ description\r
+ "a list of measured-transport-delay";\r
+\r
+ leaf ru-instance-id {\r
+ type ru-ref;\r
+ config false;\r
+ }\r
+\r
+ leaf t12-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum measured delay between DU port-ID and O-RU port-ID";\r
+ }\r
+ leaf t12-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the maximum measured delay between CU port-ID and O-RU port-ID";\r
+ }\r
+ leaf t34-min {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the minimum measured delay between O-RU port-ID and CU port-ID";\r
+ }\r
+ leaf t34-max {\r
+ type uint32;\r
+ units nanoseconds;\r
+ mandatory true;\r
+ description\r
+ "the maximum measured delay between O-RU port-ID and CU port-ID";\r
+ }\r
+ }\r
+}\r
+\r
+ container wg5-delay-management {\r
+ description\r
+ "top level tree for supporting franthaul delay management";\r
+ uses window-determine-information-group;\r
+ uses o-du-window-group;\r
+ uses o-ru-window-group;\r
+ uses measured-transport-delay-group;\r
+ }\r
+}\r
--- /dev/null
+module o-ran-wg5-features {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:wg5feat:1.0";\r
+ prefix "or-wg5feat";\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the set of re-usable type definitions for WG5 specific\r
+ features.\r
+\r
+ Copyright 2022 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2022-03-14" {\r
+ description\r
+ "version 4.0.0\r
+\r
+ 1) initial version.";\r
+\r
+ reference "ORAN-WG5.O-DU-O1.0-v04.00";\r
+ }\r
+\r
+ feature CTI {\r
+ description\r
+ "This feature indicates that the device supports CTI";\r
+ reference "TC and TM specs"; \r
+ }\r
+}\r
--- /dev/null
+module o-ran_3gpp-nr-nrm-gnbdufunction {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:oran-gnbdufunction";\r
+ prefix "or-gnbdu";\r
+\r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+\r
+ import o-ran-hardware {\r
+ prefix "o-ran-hw";\r
+ }\r
+\r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the SA5 yang data model (_3gpp-nr-nrm-gnbdufunction.yang) for configuring O-RAN configuration parameters for O-DU. Configuraion Parameters per O-DU are included.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+grouping srb-config-group {\r
+ container srb-config {\r
+ container common-configuration-mac-parameter-list {\r
+ leaf priority {\r
+ type uint8 {\r
+ range "1 .. 16";\r
+ }\r
+ mandatory true;\r
+ description "Logical channel priority";\r
+ }\r
+ leaf allowed-serv-cells {\r
+ type enumeration {\r
+ enum spcellonly;\r
+ enum spcell_largescell;\r
+ enum spcell_largescell_mediumscell;\r
+ enum spcell_largescell_mediumscell_smallscell;\r
+ }\r
+ description "Allowed Serving Cells used for this concerned logical channels with this Qosgroup. Size of the Scell refers to the value indicated by CellSize";\r
+ }\r
+\r
+ list allowed-scs-list {\r
+ key sub-carrier-spacing;\r
+ leaf sub-carrier-spacing {\r
+ type enumeration {\r
+ enum kHz15;\r
+ enum kHz30;\r
+ enum kHz60;\r
+ enum kHz120;\r
+ enum kHz240;\r
+ }\r
+ mandatory true;\r
+ description "Subcarrier spacing supported in NR. Only the values 15/30/60 KHz (for FR1) and 60/120 KHz (for FR2) are applicable.";\r
+ }\r
+ description "list for allowed-scs";\r
+ }\r
+ description "container for common-configuration-mac-parameter-list";\r
+ }\r
+\r
+ container ul-specific-parameters-list {\r
+ leaf max-pusch-duration {\r
+ type enumeration {\r
+ enum ms0p02;\r
+ enum ms0p04;\r
+ enum ms0p0625;\r
+ enum ms0p125;\r
+ enum ms0p25;\r
+ enum ms0p5;\r
+ }\r
+ description "UL MAC SDUs from this logical channel can only be transmitted using uplink grants that result in a PUSCH duration shorter than or equal to the duration indicated by this field.";\r
+ }\r
+\r
+ leaf configured-granttype1-allowed {\r
+ type boolean ;\r
+ mandatory true;\r
+ description "UL MAC SDUs from this logical channel can be transmitted on a configured grant type 1.";\r
+ }\r
+\r
+ leaf logical-channel-group {\r
+ type uint8 {\r
+ range "0 .. 7";\r
+ }\r
+ description "Logical Channel Group ID (LCGID)";\r
+ }\r
+\r
+ leaf scheduling-request-id {\r
+ type uint8 {\r
+ range "0..7";\r
+ }\r
+ description "Scheduling Request ID (SRID) Max 8. NOTE: scheduling Request id to configure SchedulingRequestConfig to SRB3.";\r
+ }\r
+\r
+ leaf logical-channel-sr-mask {\r
+ type boolean;\r
+ mandatory true;\r
+ description "Controls SR triggering when a configured uplink grant of type1 or type2 is configured. TRUE indicates that SR masking is configured for this logical channel";\r
+ }\r
+\r
+ leaf logical-channel-sr-delay-timer-applied {\r
+ type boolean;\r
+ mandatory true;\r
+ description "Indicates whether to apply the delay timer for SR transmission for this logical channel. Set to FALSE if logicalChannelSR-DelayTimer is not included in BSR-Config.";\r
+ }\r
+ leaf max-ul-harq-tx {\r
+ type uint8 {\r
+ range "1 ..8";\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of UL HARQ transmissions";\r
+ }\r
+ description "container for ul-specific-parameters-list";\r
+ }\r
+\r
+ container dl-specific-parameters-list {\r
+ leaf max-pdsch-duration {\r
+ type enumeration {\r
+ enum ms0p02;\r
+ enum ms0p04;\r
+ enum ms0p0625;\r
+ enum ms0p125;\r
+ enum ms0p25;\r
+ enum ms0p5;\r
+ }\r
+ description "DL MAC SDUs from this logical channel can only be transmitted using downlink grants that result in a PDSCH duration shorter than or equal to the duration indicated by this field.";\r
+ }\r
+ leaf max-dl-harq {\r
+ type uint8 {\r
+ range "1 .. 8";\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of DL HARQ transmissions";\r
+ }\r
+ description "container for dl-specific-parameters-list";\r
+ }\r
+ description "container for srb-config";\r
+ }\r
+ description "grouping for srb-config";\r
+ }\r
+\r
+grouping qos-group-config-list-group {\r
+ list qos-group-config-list {\r
+ key qos-group-index;\r
+ leaf qos-group-index {\r
+ type uint8 {\r
+ range 1..32;\r
+ }\r
+ mandatory true;\r
+ description "QoS group index specified in section 1.9";\r
+ }\r
+ leaf drx-profile-id {\r
+ type uint8 {\r
+ range 1..8;\r
+ }\r
+ description "Id of the DRX configuration set, if configured to QosGroup.";\r
+ }\r
+ container common-configuration-mac-parameter-list {\r
+ leaf priority {\r
+ type uint8 {\r
+ range "1 .. 16";\r
+ }\r
+ mandatory true;\r
+ description "Logical channel priority.";\r
+ }\r
+ leaf allowed-serv-cells {\r
+ type enumeration {\r
+ enum spcellonly;\r
+ enum spcell_largescell;\r
+ enum spcell_largescell_mediumscell;\r
+ enum spcell_largescell_mediumscell_smallscell;\r
+ }\r
+ description "Allowed Serving Cells used for this concerned logical channels with this Qosgroup. Size of the Scell refers to the value indicated by CellSize.";\r
+ }\r
+\r
+ list allowed-scs-list {\r
+ key sub-carrier-spacing;\r
+ leaf sub-carrier-spacing {\r
+ type enumeration {\r
+ enum kHz15;\r
+ enum kHz30;\r
+ enum kHz60;\r
+ enum kHz120;\r
+ enum kHz240;\r
+ }\r
+ mandatory true;\r
+ description "Subcarrier spacing supported in NR. Only the values 15/30/60 KHz (for FR1) and 60/120 KHz (for FR2) are applicable.";\r
+ }\r
+ description "list for allowed-scs";\r
+ }\r
+ container ul-specific-parameters-list {\r
+ leaf prioritised-bitrate {\r
+ type enumeration {\r
+ enum kBps0;\r
+ enum kBps8;\r
+ enum kBps16;\r
+ enum kBps32;\r
+ enum kBps64;\r
+ enum kBps128;\r
+ enum kBps256;\r
+ enum kBps512;\r
+ enum kBps1024;\r
+ enum kBps2048;\r
+ enum kBps4096;\r
+ enum kBps8192;\r
+ enum kBps16384;\r
+ enum kBps32768;\r
+ enum kBps65536;\r
+ enum infinity;\r
+ }\r
+ mandatory true;\r
+ description "Value in kiloBytes/s. Value kBps0 corresponds to 0 kiloBytes/s, value kBps8 corresponds to 8 kiloBytes/s, value kBps16 corresponds to 16 kiloBytes/s, and so on. For SRBs, the value can only be set to infinity.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf bucket-size-duration {\r
+ type enumeration {\r
+ enum ms5;\r
+ enum ms10;\r
+ enum ms15;\r
+ enum ms20;\r
+ enum ms50;\r
+ enum ms100;\r
+ enum ms150;\r
+ enum ms300;\r
+ enum ms500;\r
+ enum ms1000;\r
+ }\r
+ mandatory true;\r
+ description "Value in ms. ms5 corresponds to 5 ms, value ms10 corresponds to 10 ms, and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf max-pusch-duration {\r
+ type enumeration {\r
+ enum ms0p02;\r
+ enum ms0p04;\r
+ enum ms0p625;\r
+ enum ms0p125;\r
+ enum ms0p25;\r
+ enum ms0p5;\r
+ }\r
+ description "UL MAC SDUs from this logical channel can only be transmitted using uplink grants that result in a PUSCH duration shorter than or equal to the duration indicated by this field. ";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf configured-grant-type1-allowed {\r
+ type boolean;\r
+ mandatory true;\r
+ description "UL MAC SDUs from this logical channel can be transmitted on a configured grant type 1.";\r
+ reference "3GPP TS 38.321";\r
+ }\r
+\r
+ leaf logical-channnel-group {\r
+ type uint8 {\r
+ range 0..7;\r
+ }\r
+ description "Logical Channel Group ID (LCGID)";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf scheduling-request-id {\r
+ type uint8 {\r
+ range 0..7;\r
+ }\r
+ description "Scheduling Request ID (SRID) Max 8. NOTE: scheduling Request id to configure SchedulingRequestConfig to each QosGroup.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf logical-channel-sr-mask {\r
+ type boolean;\r
+ mandatory true;\r
+ description "Controls SR triggering when a configured uplink grant of type1 or type2 is configured. TRUE indicates that SR masking is configured for this logical channel";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf logical-channel-sr-delay-timer-applied {\r
+ type boolean;\r
+ mandatory true;\r
+ description "Indicates whether to apply the delay timer for SR transmission for this logical channel. Set to FALSE if logicalChannelSR-DelayTimer is not included in BSR-Config.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf bitrate-query-prohibit-timer {\r
+ type enumeration {\r
+ enum s0;\r
+ enum s0dot4;\r
+ enum s0dot8;\r
+ enum s1dot6;\r
+ enum s3;\r
+ enum s6;\r
+ enum s12;\r
+ enum s30;\r
+ }\r
+ description "The timer is used for bit rate recommendation query, in seconds.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf max-ul-harq-tx {\r
+ type uint8 {\r
+ range 1..8;\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of UL HARQ transmissions";\r
+ }\r
+ description "container for ul-specific-parameters-list";\r
+ }\r
+\r
+ container dl-specific-parameters-list {\r
+ leaf max-pdsch-duration {\r
+ type enumeration {\r
+ enum ms0p02;\r
+ enum ms0p04;\r
+ enum ms0p0625;\r
+ enum ms0p125;\r
+ enum ms0p25;\r
+ enum ms0p5;\r
+ }\r
+ description "DL MAC SDUs from this logical channel can only be transmitted using downlink grants that result in a PDSCH duration shorter than or equal to the duration indicated by this field. ";\r
+ }\r
+\r
+ leaf max-dl-harq {\r
+ type uint8 {\r
+ range "1 .. 8";\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of DL HARQ transmissions";\r
+ }\r
+ description "dl-specific-parameters-list";\r
+ }\r
+ description "conatiner for common-configuration-mac-parameter-list";\r
+ }\r
+ description "list for qos-group-config";\r
+}\r
+description "grouping for qos-group-config-list";\r
+}\r
+\r
+\r
+grouping drx-config-group {\r
+ list drx-config {\r
+ key drx-profile-id;\r
+ leaf drx-profile-id {\r
+ type uint8 {\r
+ range 1..32;\r
+ }\r
+ mandatory true;\r
+ description "id for drx-profile";\r
+ }\r
+\r
+ choice drx-on-duration-timer {\r
+ case drx-on-duration-timer-submilliseconds {\r
+ leaf drx-on-duration-timer-submilliseconds {\r
+ type uint8 {\r
+ range 1..31;\r
+ }\r
+ mandatory true;\r
+ description "Duration at the beginning of a DRX Cycle in submillisecond ";\r
+ }\r
+ }\r
+ case drx-on-duration-timer-milliseconds {\r
+ leaf drx-on-duration-timer-milliseconds {\r
+ type enumeration {\r
+ enum ms1;\r
+ enum ms2;\r
+ enum ms3;\r
+ enum ms4;\r
+ enum ms5;\r
+ enum ms6;\r
+ enum ms8;\r
+ enum ms10;\r
+ enum ms20;\r
+ enum ms30;\r
+ enum ms40;\r
+ enum ms50;\r
+ enum ms60;\r
+ enum ms80;\r
+ enum ms100;\r
+ enum ms200;\r
+ enum ms300;\r
+ enum ms400;\r
+ enum ms500;\r
+ enum ms600;\r
+ enum ms800;\r
+ enum ms1000;\r
+ enum ms1200;\r
+ enum ms1600;\r
+ }\r
+ mandatory true;\r
+ description "Duration at the beginning of a DRX Cycle in millisecond";\r
+ }\r
+ }\r
+ description "Selection of milliseconds (drx-onDurationTimer_subMilliSedonds or drx-onDurationTimer_milliSeconds)";\r
+ }\r
+\r
+ leaf drx-inactivity-timer {\r
+ type enumeration {\r
+ enum ms0;\r
+ enum ms1;\r
+ enum ms2;\r
+ enum ms3;\r
+ enum ms4;\r
+ enum ms5;\r
+ enum ms6;\r
+ enum ms8;\r
+ enum ms10;\r
+ enum ms20;\r
+ enum ms30;\r
+ enum ms40;\r
+ enum ms50;\r
+ enum ms60;\r
+ enum ms80;\r
+ enum ms100;\r
+ enum ms200;\r
+ enum ms300;\r
+ enum ms500;\r
+ enum ms750;\r
+ enum ms1280;\r
+ enum ms1920;\r
+ enum ms2560;\r
+ }\r
+ mandatory true;\r
+ description "Duration after the PDCCH occasion in which a PDCCH indicates an initial UL or DL user data transmission for the MAC entity";\r
+ }\r
+\r
+ leaf drx-harq-rtt-timer-dl {\r
+ type uint8 {\r
+ range 0..56;\r
+ }\r
+ mandatory true;\r
+ description "Minimum duration before a DL assignment for HARQ retransmission is expected by the MAC entity";\r
+ }\r
+\r
+ leaf drx-harq-rtt-timer-ul {\r
+ type uint8 {\r
+ range 0..56;\r
+ }\r
+ mandatory true;\r
+ description "Minimum duration before a UL HARQ retransmission grant is expected by the MAC entity.";\r
+ }\r
+\r
+ leaf drx-retransmission-timer-dl {\r
+ type enumeration {\r
+ enum sl0;\r
+ enum sl1;\r
+ enum sl2;\r
+ enum sl4;\r
+ enum sl6;\r
+ enum sl8;\r
+ enum sl16;\r
+ enum sl24;\r
+ enum sl33;\r
+ enum sl40;\r
+ enum sl64;\r
+ enum sl80;\r
+ enum sl96;\r
+ enum sl112;\r
+ enum sl28;\r
+ enum sl60;\r
+ enum sl320;\r
+ }\r
+ mandatory true;\r
+ description "Maximum duration until a DL retransmission is received";\r
+ }\r
+\r
+ leaf drx-retransmission-timer-ul {\r
+ type enumeration {\r
+ enum sl0;\r
+ enum sl1;\r
+ enum sl2;\r
+ enum sl4;\r
+ enum sl6;\r
+ enum sl8;\r
+ enum sl16;\r
+ enum sl24;\r
+ enum sl33;\r
+ enum sl40;\r
+ enum sl64;\r
+ enum sl80;\r
+ enum sl96;\r
+ enum sl112;\r
+ enum sl28;\r
+ enum sl60;\r
+ enum sl320;\r
+ }\r
+ mandatory true;\r
+ description "Maximum duration until a grant for UL retransmission is received";\r
+ }\r
+\r
+ leaf drx-long-cycle {\r
+ type enumeration {\r
+ enum ms10;\r
+ enum ms20;\r
+ enum ms32;\r
+ enum ms40;\r
+ enum ms60;\r
+ enum ms64;\r
+ enum ms70;\r
+ enum ms80;\r
+ enum ms128;\r
+ enum ms160;\r
+ enum ms256;\r
+ enum ms320;\r
+ enum ms512;\r
+ enum ms640;\r
+ enum ms1024;\r
+ enum ms1280;\r
+ enum ms2048;\r
+ enum ms2560;\r
+ enum ms5120;\r
+ enum ms10240;\r
+ }\r
+ mandatory true;\r
+ description "This parameter defines the long DRX cycle.";\r
+ }\r
+\r
+ container short-drx {\r
+\r
+ leaf drx-short-cycle {\r
+ type enumeration {\r
+ enum ms2;\r
+ enum ms3;\r
+ enum ms4;\r
+ enum ms5;\r
+ enum ms6;\r
+ enum ms7;\r
+ enum ms8;\r
+ enum ms10;\r
+ enum ms14;\r
+ enum ms16;\r
+ enum ms20;\r
+ enum ms30;\r
+ enum ms32;\r
+ enum ms35;\r
+ enum ms40;\r
+ enum ms64;\r
+ enum ms80;\r
+ enum ms128;\r
+ enum ms160;\r
+ enum ms256;\r
+ enum ms320;\r
+ enum ms512;\r
+ enum ms640;\r
+ }\r
+ mandatory true;\r
+ description "Short DRX cycle. If configured, the value of drx-LongCycle shall be a multiple of the drx-ShortCycle value. Value in multiples of drx-ShortCycle. A value of 1 corresponds to drx-ShortCycle, a value of 2 corresponds to 2 * drx-ShortCycle and so on";\r
+ }\r
+\r
+ leaf drx-short-cycle-timer {\r
+ type uint8 {\r
+ range 1..16;\r
+ }\r
+ mandatory true;\r
+ description "Duration the UE shall follow the Short DRX cycle";\r
+ }\r
+ description "container for short-drx";\r
+ }\r
+\r
+ list scheduling-request-config {\r
+ key scheduling-request-id;\r
+ min-elements 1;\r
+ leaf scheduling-request-id {\r
+ type uint8 {\r
+ range 0..7;\r
+ }\r
+ mandatory true;\r
+ description "Scheduling Request ID (SRID)";\r
+ }\r
+\r
+ leaf sr-prohibit-timer {\r
+ type enumeration {\r
+ enum ms0;\r
+ enum ms1;\r
+ enum ms2;\r
+ enum ms4;\r
+ enum ms8;\r
+ enum ms16;\r
+ enum ms32;\r
+ enum ms64;\r
+ enum ms128;\r
+ }\r
+ description "Timer for SR transmission on PUCCH";\r
+ }\r
+\r
+ leaf sr-trans-max {\r
+ type enumeration {\r
+ enum n4;\r
+ enum n8;\r
+ enum n16;\r
+ enum n32;\r
+ enum n64;\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of SR transmissions";\r
+ }\r
+ description "list for scheduling-request-config";\r
+ }\r
+ description "list for drx-config";\r
+ }\r
+ description "grouping for drx-config";\r
+}\r
+\r
+grouping bsr-config-group {\r
+ container bsr-config {\r
+ leaf periodicity-bsr-timer {\r
+ type enumeration {\r
+ enum sf1;\r
+ enum sf5;\r
+ enum sf10;\r
+ enum sf16;\r
+ enum sf20;\r
+ enum sf32;\r
+ enum sf40;\r
+ enum sf64;\r
+ enum sf80;\r
+ enum sf128;\r
+ enum sf160;\r
+ enum sf320;\r
+ enum sf640;\r
+ enum sf1280;\r
+ enum sf2560;\r
+ enum infinity;\r
+ }\r
+ mandatory true;\r
+ description "Value in number of subframes. Value sf1 corresponds to 1 subframe, value sf5 corresponds to 5 subframes and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf retx-bsr-timer {\r
+ type enumeration {\r
+ enum sf10;\r
+ enum sf20;\r
+ enum sf40;\r
+ enum sf80;\r
+ enum sf160;\r
+ enum sf320;\r
+ enum sf640;\r
+ enum sf1280;\r
+ enum sf2560;\r
+ enum sf5120;\r
+ enum sf10240;\r
+ }\r
+ mandatory true;\r
+ description "Value in number of subframes. Value sf10 corresponds to 10 subframes, value sf20 corresponds to 20 subframes and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf logical-channel-sr-delay-timer {\r
+ type enumeration {\r
+ enum sf20;\r
+ enum sf40;\r
+ enum sf64;\r
+ enum sf128;\r
+ enum sf512;\r
+ enum sf1024;\r
+ enum sf2560;\r
+ }\r
+ mandatory true;\r
+ description "Value in number of subframes. Value sf20 corresponds to 20 subframes, sf40 corresponds to 40 subframes, and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ description "container for bsr-config";\r
+ }\r
+ description "grouping for bsr-config";\r
+ }\r
+\r
+ grouping ta-configuration-group {\r
+ list ta-configuration-list {\r
+ key id;\r
+ min-elements 1;\r
+ leaf id {\r
+ type uint8 {\r
+ range 1..4;\r
+ }\r
+ description "id for ta-configuration-list";\r
+ }\r
+\r
+ leaf cell-size {\r
+ type enumeration {\r
+ enum large;\r
+ enum middle;\r
+ enum small;\r
+ enum very-small;\r
+ }\r
+ mandatory true;\r
+ description "Indicates the Cell size of the serving cell";\r
+ }\r
+\r
+ leaf time-alignment-timer {\r
+ type enumeration {\r
+ enum ms500;\r
+ enum ms750;\r
+ enum ms1280;\r
+ enum ms1920;\r
+ enum ms2560;\r
+ enum ms5120;\r
+ enum ms10240;\r
+ enum infinity;\r
+ }\r
+ mandatory true;\r
+ description "Value in ms of the timeAlignmentTimer for TAG with ID tag-Id, as specified in TS 38.321 [3].";\r
+ }\r
+ description "list for ta-configuration";\r
+ }\r
+ description "grouping for ta-configuration";\r
+ }\r
+\r
+ grouping phr-config-group {\r
+ container phr-config {\r
+ leaf phr-periodic-timer {\r
+ type enumeration {\r
+ enum sf10;\r
+ enum sf20;\r
+ enum sf50;\r
+ enum sf100;\r
+ enum sf200;\r
+ enum sf500;\r
+ enum sf1000;\r
+ enum infinity;\r
+ }\r
+ description "Value in number of subframes for PHR reporting as specified in TS 38.321 [3]. Value sf10 corresponds to 10 subframes, value sf20 corresponds to 20 subframes, and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf phr-prohibit-timer {\r
+ type enumeration {\r
+ enum sf0;\r
+ enum sf10;\r
+ enum sf20;\r
+ enum sf50;\r
+ enum sf100;\r
+ enum sf200;\r
+ enum sf500;\r
+ enum sf1000;\r
+ }\r
+ mandatory true;\r
+ description "Value in number of subframes for PHR reporting as specified in TS 38.321 [3]. Value sf0 corresponds to 0 subframe, value sf10 corresponds to 10 subframes, value sf20 corresponds to 20 subframes, and so on.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf phr-tx-power-factor-change {\r
+ type enumeration {\r
+ enum db1;\r
+ enum db3;\r
+ enum db6;\r
+ enum infinity;\r
+ }\r
+ mandatory true;\r
+ description "Value in dB for PHR reporting as specified in TS 38.321 [3]. Value dB1 corresponds to 1 dB, dB3 corresponds to 3 dB and so on. The same value applies for each serving cell (although the associated functionality is performed independently for each cell).";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf phr-type2-othercell {\r
+ type boolean;\r
+ mandatory true;\r
+ description "If set to true, the UE shall report a PHR type 2 for the SpCell of the other MAC entity. See TS 38.321 [3], clause 5.4.6. Network sets this field to false if the UE is not configured with an E-UTRA MAC entity.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf phr-mode-other-cg {\r
+ type enumeration {\r
+ enum real;\r
+ enum virtual;\r
+ }\r
+ mandatory true;\r
+ description "Indicates the mode (i.e. real or virtual) used for the PHR of the activated cells that are part of the other Cell Group (i.e. MCG or SCG), when DC is configured. If the UE is configured with only one cell group (no DC), it ignores the field.";\r
+ }\r
+ description "container for phr-config";\r
+ }\r
+ description "grouping for phr-config";\r
+ }\r
+\r
+grouping scell-deactivation-timer-list-group {\r
+ list scell-deactivation-timer-list {\r
+ key id;\r
+ min-elements 1;\r
+ leaf id {\r
+ type uint8 {\r
+ range 1..4;\r
+ }\r
+ mandatory true;\r
+ description "id for scell-deactivation-timer-list";\r
+ }\r
+\r
+ leaf cell-size {\r
+ type enumeration {\r
+ enum large;\r
+ enum middle;\r
+ enum small;\r
+ enum very-small;\r
+ }\r
+ mandatory true;\r
+ description "Indicate the Cell size";\r
+ }\r
+ leaf scell-deactivation-timer {\r
+ type enumeration {\r
+ enum ms20;\r
+ enum ms40;\r
+ enum ms80;\r
+ enum ms160;\r
+ enum ms200;\r
+ enum ms240;\r
+ enum ms320;\r
+ enum ms400;\r
+ enum ms480;\r
+ enum ms520;\r
+ enum ms640;\r
+ enum ms720;\r
+ enum ms840;\r
+ enum ms1280;\r
+ enum infinity;\r
+ }\r
+ mandatory true;\r
+ description "Scell deactivation timer";\r
+ }\r
+ description "list for scell-deactivation-timer";\r
+ }\r
+ description "grouping for scell-deactivation-timer-list";\r
+ }\r
+\r
+\r
+\r
+\r
+grouping mac-configuration-group {\r
+\r
+\r
+container mac-configuration {\r
+ uses srb-config-group;\r
+ uses qos-group-config-list-group;\r
+ uses drx-config-group;\r
+ uses bsr-config-group;\r
+ uses ta-configuration-group;\r
+ uses phr-config-group;\r
+ uses scell-deactivation-timer-list-group;\r
+\r
+\r
+ leaf csi-mask {\r
+ type boolean;\r
+ description "If set to true, the UE limits CSI reports to the on-duration period of the DRX cycle";\r
+ }\r
+ description "contaner for mac-configuration";\r
+}\r
+description "grouping for mac-configuration";\r
+}\r
+\r
+augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/gnbdu3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ container o-ran-configuration {\r
+ uses mac-configuration-group;\r
+ description "Container for o-ran-configuration. These are configured when O-DU is compliant with O1 interface spec for O-DU. ";\r
+ }\r
+ description "This module augments _3gpp-nr-nrm-gnbdufunction.yang for adding O-RAN original configuration parameters";\r
+}\r
+\r
+}\r
--- /dev/null
+module o-ran_3gpp-nr-nrm-nrcelldu {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:oran-nrcelldu";\r
+ prefix "or-nrcelldu";\r
+\r
+ import _3gpp-common-managed-element {\r
+ prefix "me3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-gnbdufunction {\r
+ prefix "gnbdu3gpp";\r
+ }\r
+\r
+ import _3gpp-nr-nrm-nrcelldu {\r
+ prefix "nrcelldu3gpp";\r
+ }\r
+\r
+ import o-ran-hardware {\r
+ prefix "o-ran-hw";\r
+ }\r
+\r
+ import ietf-hardware {\r
+ prefix hw;\r
+ }\r
+\r
+\r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the SA5 yang data model (_3gpp-nr-nrm-nrcelldu.yang) for configuring O-RAN configuration parameters for O-DU. Configuraion Parameters per cell are included.\r
+\r
+ Copyright 2020 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\r
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or without\r
+ modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the above disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the above disclaimer in the documentation\r
+ and/or other materials provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of its\r
+ contributors may be used to endorse or promote products derived from\r
+ this software without specific prior written permission.";\r
+\r
+ revision "2020-09-25" {\r
+ description\r
+ "version 1.0.0 - first release of O-RAN O1 for O-DU YANG models";\r
+\r
+ reference "ORAN-WG5.MP.0-v01.00";\r
+ }\r
+\r
+grouping frequency-band-list-group {\r
+ list freqency-band-list {\r
+ key id;\r
+ leaf id {\r
+ type uint8 {\r
+ range 1..32;\r
+ }\r
+ description "id for freqency-band-list";\r
+ }\r
+ leaf nr-frquency-band {\r
+ type uint16 { range "1 .. 1024"; }\r
+ mandatory true;\r
+ description "Operating Band as defined in TS 38.104 [17] section 5.4.2.3.\r
+ The value 1 corresponds to NR operating band n1, value 2 corresponds to NR operating band n2, etc.";\r
+ reference "3GPP TS 38.473";\r
+ }\r
+ description "List for freqency-band";\r
+ }\r
+ description "Grouping for frequency-band-list";\r
+ }\r
+\r
+ grouping scs-specific-carrier-list-group {\r
+ list scs-specific-carrier-list {\r
+ key id;\r
+ leaf id {\r
+ type uint8 {\r
+ range 1..5;\r
+ }\r
+ description "id for scs-specific-carrier-list";\r
+ }\r
+ leaf offset-to-carrier {\r
+ type uint16 {\r
+ range "0 .. 2199";\r
+ }\r
+ mandatory true;\r
+ description "Offset in frequency domain between Point A (lowest subcarrier of common RB 0) and the lowest usable subcarrier on this carrier in number of PRBs (using the subcarrierSpacing defined for this carrier). The maximum value corresponds to 275*8-1. See TS 38.211 [16], clause 4.4.2.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf subcarrier-spacing {\r
+ type enumeration {\r
+ enum kHz15;\r
+ enum kHz30;\r
+ enum kHz60;\r
+ enum kHz120;\r
+ enum kHz240;\r
+ }\r
+ mandatory true;\r
+ description "Subcarrier spacing of this carrier. It is used to convert the offsetToCarrier into an actual frequency. Only the values 15 kHz, 30 kHz or 60 kHz (FR1), and 60 kHz or 120 kHz (FR2) are applicable.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf carrier-bandwidth {\r
+ type uint16 {\r
+ range "1 .. 275";\r
+ }\r
+ mandatory true;\r
+ description "Width of this carrier in number of PRBs (using the subcarrierSpacing defined for this carrier) (see TS 38.211 [16], clause 4.4.2).";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ description "List for scs-specific-carrier";\r
+ }\r
+ description "Grouping for scs-specific-carrier-list";\r
+ }\r
+\r
+grouping pattern-group {\r
+ leaf dl-ul-transmission-periodicity {\r
+ type enumeration {\r
+ enum ms0p5;\r
+ enum ms0p625;\r
+ enum ms1;\r
+ enum ms1p25;\r
+ enum ms2;\r
+ enum ms2p5;\r
+ enum ms5;\r
+ enum ms10;\r
+ }\r
+ mandatory true;\r
+ description "Periodicity of the DL-UL pattern, see TS 38.213 [13], clause 11.1. If the dl-UL-TransmissionPeriodicity-v1530 is signalled, UE shall ignore the dl-UL-TransmissionPeriodicity (without suffix).";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf nr-of-downlink-slots {\r
+ type uint16 {\r
+ range "0 .. 320";\r
+ }\r
+ mandatory true;\r
+ description "Number of consecutive full DL slots at the beginning of each DL-UL pattern, see TS 38.213 [13], clause 11.1. In this release, the maximum value for this field is 80.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf nr-of-downlink-symbols {\r
+ type uint8 {\r
+ range "0 .. 13";\r
+ }\r
+ mandatory true;\r
+ description "Number of consecutive DL symbols in the beginning of the slot following the last full DL slot (as derived from nrofDownlinkSlots). The value 0 indicates that there is no partial-downlink slot. (see TS 38.213 [13], clause 11.1).";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf nr-of-uplink-slots {\r
+ type uint16 {\r
+ range "0 .. 320";\r
+ }\r
+ mandatory true;\r
+ description "Number of consecutive full UL slots at the end of each DL-UL pattern, see TS 38.213 [13], clause 11.1. In this release, the maximum value for this field is 80.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf nr-of-uplink-symbols {\r
+ type uint16 {\r
+ range "0 .. 13";\r
+ }\r
+ mandatory true;\r
+ description "Number of consecutive UL symbols in the end of the slot preceding the first full UL slot (as derived from nrofUplinkSlots). The value 0 indicates that there is no partial-uplink slot. (see TS 38.213 [13], clause 11.1).";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf dl-ul-transmission-periodicity-v1530 {\r
+ type enumeration {\r
+ enum ms3;\r
+ enum ms4;\r
+ }\r
+ description "See description of dl-ul-transmission-periodicity";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ description "Grouping for pattern-group";\r
+}\r
+\r
+\r
+grouping cell-configuration-group {\r
+container cell-configuration {\r
+ leaf configured-eps-tac {\r
+ type string;\r
+ description "This information element is used to identify a configured EPS Tracking Area Code in order to enable application of Roaming and Access Restrictions for EN-DC as specified in TS 37.340 [7]. This IE is configured for the cell, but not broadcast.";\r
+ reference "3GPP TS 38.473";\r
+ }\r
+\r
+ choice duplex-mode {\r
+ case fdd-list {\r
+ container ul-freq-info {\r
+ uses frequency-band-list-group;\r
+ uses scs-specific-carrier-list-group;\r
+ leaf p-max {\r
+ type int8 {\r
+ range "-30 .. 33";\r
+ }\r
+ description "Maximum transmit power allowed in this serving cell. The maximum transmit power that the UE may use on this serving cell may be additionally limited by p-NR-FR1 (configured for the cell group) and by p-UE-FR1 (configured total for all serving cells operating on FR1). If absent, the UE applies the maximum power according to TS 38.101-1 [15]. Value in dBm.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ description "Container for ul-freq-info";\r
+ }\r
+ container dl-freq-info {\r
+ uses frequency-band-list-group;\r
+ uses scs-specific-carrier-list-group;\r
+ description "Container for dl-freq-info";\r
+ }\r
+ description "fdd-list";\r
+ }\r
+\r
+ case tdd-list {\r
+ uses frequency-band-list-group;\r
+ container pattern1-list {\r
+ uses pattern-group;\r
+ description "Container for pattern1-list";\r
+ }\r
+ container pattern2-list {\r
+ uses pattern-group;\r
+ description "Container for pattern2-list";\r
+ }\r
+ }\r
+ description "Selection of Duplex mode (fdd List or tdd List)
";\r
+ }\r
+\r
+ container gap-config {\r
+ leaf gap-offset {\r
+ type uint8 {\r
+ range "0 .. 159 ";\r
+ }\r
+ description "The gap offset of the gap pattern with MGRP indicated in the field mgrp. The value range should be from 0 to mgrp-1";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf mgl {\r
+ type enumeration {\r
+ enum ms1dot5;\r
+ enum ms3;\r
+ enum ms3dot5;\r
+ enum ms4;\r
+ enum ms5dot5;\r
+ enum ms6;\r
+ }\r
+ description "The measurement gap length in ms of the measurement gap.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf mgrp {\r
+ type enumeration {\r
+ enum ms20;\r
+ enum ms40;\r
+ enum ms80;\r
+ enum ms160;\r
+ }\r
+ description "Measurement gap repetition period in (ms) of the measurement gap";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+\r
+ leaf mgta {\r
+ type enumeration {\r
+ enum ms0;\r
+ enum ms0dot25;\r
+ enum ms0dot5;\r
+ }\r
+ description "The measurement gap timing advance in ms.";\r
+ reference "3GPP TS 38.331";\r
+}\r
+description "Container for gap-config";\r
+ }\r
+ description "Conatiner for cell-configuration";\r
+}\r
+description "Grouping for cell-configuration";\r
+}\r
+\r
+grouping mib-configuration-group {\r
+container mib-configuration {\r
+ leaf control-resource-set-zero {\r
+ type uint8 {\r
+ range "0 .. 15";\r
+ }\r
+ mandatory true;\r
+ description "Parameters of the common CORESET#0 which can be used in any common or UE-specific search spaces. The values are interpreted like the corresponding bits in MIB pdcch-ConfigSIB1. Even though this field is only configured in the initial BWP (BWP#0) controlResourceSetZero can be used in search spaces configured in other DL BWP(s) than the initial DL BWP if the conditions defined in TS 38.213 [13], clause 10 are satisfied.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ leaf search-space-zero {\r
+ type uint8 {\r
+ range "0 .. 15";\r
+ }\r
+ mandatory true;\r
+ description "Parameters of the common SearchSpace#0. The values are interpreted like the corresponding bits in MIB pdcch-ConfigSIB1. Even though this field is only configured in the initial BWP (BWP#0), searchSpaceZero can be used in search spaces configured in other DL BWP(s) than the initial DL BWP if the conditions described in TS 38.213 [13], clause 10, are satisfied.";\r
+ reference "3GPP TS 38.331";\r
+ }\r
+ description "Groupong for mib-configuration";\r
+}\r
+description "Grouping for mib-configuration";\r
+}\r
+\r
+grouping mac-configuration-group {\r
+container mac-configuration {\r
+ leaf skip-uplink-tx-dynamic {\r
+ type boolean;\r
+ mandatory true;\r
+ description "If set to true, the UE skips UL transmission for an uplink grant other than a configured uplink grant if no data is available for transmission in the UE buffer.";\r
+ }\r
+\r
+ leaf max-harq-msg3-tx {\r
+ type uint8 {\r
+ range 1..8;\r
+ }\r
+ mandatory true;\r
+ description "Maximum number of Msg3transmissions";\r
+ }\r
+\r
+ leaf cell-size {\r
+ type enumeration {\r
+ enum large;\r
+ enum middle;\r
+ enum small;\r
+ enum very-small;\r
+ }\r
+ mandatory true;\r
+ description "Indicate the Cell size of every cell.";\r
+ }\r
+ description "Container for mac-configuration";\r
+}\r
+description "Grouping for mac-configuration";\r
+}\r
+\r
+augment "/me3gpp:ManagedElement/gnbdu3gpp:GNBDUFunction/nrcelldu3gpp:NRCellDU/nrcelldu3gpp:attributes" {\r
+ when "(derived-from-or-self(/hw:hardware/hw:component/hw:class, 'o-ran-hw:O-DU-COMPONENT'))";\r
+ container o-ran-configuration {\r
+ uses cell-configuration-group;\r
+ uses mib-configuration-group;\r
+ uses mac-configuration-group;\r
+ description "Container for o-ran-configuration";\r
+ }\r
+ description "This module augments _3gpp-nr-nrm-nrcelldu.yang for adding O-RAN original configuration parameters";\r
+}\r
+\r
+}\r
--- /dev/null
+module o-ran_3gpp-nr-nrm-rrmpolicy {\r
+ yang-version 1.1;\r
+ namespace "urn:o-ran:oran-rrmpolicy";\r
+ prefix "or-rrmpolicy";\r
+\r
+ import _3gpp-nr-nrm-rrmpolicy {\r
+ prefix "nrrrmpolicy3gpp";\r
+ }\r
+ \r
+ organization "O-RAN Alliance";\r
+\r
+ contact\r
+ "www.o-ran.org";\r
+\r
+ description\r
+ "This module defines the augmentation of the SA5 yang data model\r
+ according to 28.541 to split the resourceType PRB type into two\r
+ types: ul-prb and dl-prb.\r
+\r
+ Copyright 2021 the O-RAN Alliance.\r
+\r
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\r
+ CONTRIBUTORS 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES,\r
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\r
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ Redistribution and use in source and binary forms, with or\r
+ without modification, are permitted provided that the following\r
+ conditions are met:\r
+\r
+ * Redistributions of source code must retain the above\r
+ copyright notice, this list of conditions and the above\r
+ disclaimer.\r
+ * Redistributions in binary form must reproduce the above\r
+ copyright notice, this list of conditions and the above\r
+ disclaimer in the documentation and/or other materials\r
+ provided with the distribution.\r
+ * Neither the Members of the O-RAN Alliance nor the names of\r
+ its contributors may be used to endorse or promote products\r
+ derived from this software without specific prior written\r
+ permission.";\r
+\r
+ revision 2021-10-31 {\r
+ description\r
+ "Revision that depcrecates the 'direction' leaf.";\r
+ reference\r
+ "O1 for O-DU v03.00 Chapter 10.5.";\r
+ }\r
+ \r
+ revision 2021-06-24 {\r
+ description\r
+ "Initial version";\r
+ reference\r
+ "ORAN-WG5.MP.O1.0-v01.00";\r
+ }\r
+\r
+ augment "/nrrrmpolicy3gpp:RRMPolicyRatio/nrrrmpolicy3gpp:attributes" {\r
+ when "(nrrrmpolicy3gpp:resourceType = 'PRB')";\r
+ container o-ran-rrmpolicy {\r
+ leaf direction {\r
+ type enumeration {\r
+ enum dl {\r
+ description\r
+ "Downlink Physical Resource Blocks.";\r
+ }\r
+ enum ul {\r
+ description\r
+ "Uplink Physical Resource Blocks.";\r
+ }\r
+ enum both {\r
+ description\r
+ "When Physical Resource Blocks (PRB) are allocated for\r
+ both uplink and downlink. This flag makes the model\r
+ backward compatible with existing implementations\r
+ that do not want to split the resources.";\r
+ }\r
+ }\r
+ status deprecated;\r
+ description\r
+ "Specifies the direction for the PRBs.";\r
+ }\r
+ description\r
+ "Container for RRMPolicy_ IOC attributes.";\r
+ }\r
+ description\r
+ "Augment of the 3GPP RRMPolicy_ IOC.";\r
+ }\r
+}\r
--- /dev/null
+import json
+import os
+import socket
+import ssl
+import threading
+
+from concurrent.futures import ThreadPoolExecutor
+
+import xml.etree.ElementTree as ET
+
+from core.dict_factory import DictFactory, BaseTemplate
+from core.extension import Extension
+from core.config import Config
+from core.netconf import Datastore, Netconf
+from core.ves import Ves, VesMessage
+from util.docker import get_hostname
+from util.logging import get_pynts_logger
+from util.threading import stop_event, sa_sleep
+from libyang.util import LibyangError, DataType, c2str
+
+from netconf_client.connect import connect_tls
+from netconf_client.ncclient import Manager
+from ncclient.transport.errors import SessionCloseError, TransportError
+
+from feature.ves_pnfregistration import VesPnfRegistrationFeature
+
+logger = get_pynts_logger("o-du-o1")
+
+# Path to your TLS certificate, private key, and CA certificate
+CERT_FILE = "/home/oranuser/.ssh/odu_certificate.pem"
+KEY_FILE = "/home/oranuser/.ssh/private_key.pem"
+CA_CERT_FILE = "/home/oranuser/.ssh/ODU_rootCA.crt" # CA certificate to verify client certs
+
+
+# Thread-safe dictionary to store active sessions
+active_sessions = {}
+
+# Lock to ensure thread-safe operations on the active_sessions dictionary
+session_lock = threading.Lock()
+
+class Main(Extension):
+ def init(self) -> None:
+ self.netconf = Netconf()
+ self.config = Config()
+ self.ves: Ves = Ves()
+
+ self.max_workers = 5 # Number of threads in the pool
+
+ DictFactory.add_template("3gpp-managed-element", _3GPP_ManagedElementTemplate)
+
+ def startup(self) -> None:
+ logger.info("o-du-o1 extension loaded")
+
+ self.ves_pnfregistration = VesPnfRegistrationFeature()
+ self.ves_pnfregistration.start()
+
+ self.netconf.operational.subscribe_oper_data_request("o-ran-aggregation-base", "/o-ran-aggregation-base:aggregated-o-ru/*", self.o_ran_aggregation_base_oper_data_cb, oper_merge=True)
+ logger.debug("subscribing to operational data requests: /o-ran-aggregation-base:aggregated-o-ru/*")
+
+ host = "::"
+ port = int(os.environ.get("O_DU_CALLHOME_PORT", 4335)) # Adjust to the appropriate port for CallHome
+
+ listener_thread = threading.Thread(target=self.accept_tls_connections, args=(host, port))
+ listener_thread.start()
+
+ logger.debug(f"Active sessions: {list(active_sessions.keys())}")
+
+ # self.load_3gpp_data()
+ # self.connect_to_oru()
+
+
+ ### Sample notification from YANG Schema Mount
+ # with self.netconf.connection.get_ly_ctx() as ctx:
+ # data = self.netconf.operational.get_item("/o-ran-aggregation-base:aggregated-o-ru/aggregation[ru-instance='Baciells_sRU67XXX_B122601202134000326']/o-ran-agg-ietf-hardware:ietf-hardware-model")
+ # logger.debug(f"Found xPath: {data.xpath}")
+ # if data is not None:
+ # dnode = ctx.create_data_path(data.xpath + "/ietf-hardware:hardware-state-change")
+ # while True:
+ # logger.debug(f"Sending notification with xpath {data.xpath + '/ietf-hardware:hardware-state-change'}")
+ # self.netconf.running.notification_send_ly(dnode)
+ # time.sleep(30)
+ ### end sample notification from YANG Schema Mount
+
+ def o_ran_aggregation_base_oper_data_cb(self, xpath, private_data):
+
+ global active_sessions
+ num_of_sessions = len(list(active_sessions.keys()))
+ if num_of_sessions == 0:
+ return None
+
+ agg_base_xml = f"<aggregated-o-ru xmlns=\"urn:o-ran:agg-base:1.0\">\n"
+
+ for _, value in active_sessions.items():
+ mgr = value["session"]
+ xml_data_str = mgr.get(filter="<filter><hw:hardware xmlns:hw=\"urn:ietf:params:xml:ns:yang:ietf-hardware\"/></filter>").data_xml
+
+ with self.netconf.connection.get_ly_ctx() as ctx:
+ ietf_hw_xml = self.get_xml_string_from_response(xml_data_str)
+ aggregation_instance_xml = f"<aggregation><ru-instance>{value['hostname']}</ru-instance><ietf-hardware-model xmlns=\"urn:o-ran:agg-ietf-hardware:1.0\">{ietf_hw_xml}</ietf-hardware-model></aggregation>"
+ agg_base_xml += f"{aggregation_instance_xml}"
+
+ agg_base_xml += f"</aggregated-o-ru>"
+ logger.debug(f"Constructed XML: {agg_base_xml}")
+
+ data = ctx.parse_data_mem(agg_base_xml, "xml", parse_only=True)
+ return data
+
+ def handle_callhome_session(self, conn, addr, session_id):
+ """
+ Handle a single NETCONF CallHome session over TLS.
+ """
+ logger.info(f"Handling CallHome connection from {addr}")
+ try:
+ # Establish a NETCONF session using netconf_client over the TLS connection
+ session = connect_tls(sock=conn, keyfile=KEY_FILE,
+ certfile=CERT_FILE,
+ ca_certs=CA_CERT_FILE)
+ mgr = Manager(session, timeout=3)
+
+ hostname_xml_data_str = mgr.get_config(source="running", filter="<filter><sys:system xmlns:sys=\"urn:ietf:params:xml:ns:yang:ietf-system\"><sys:hostname/></sys:system></filter>").data_xml
+ hostname_json = self.get_json_object_from_xml(hostname_xml_data_str)
+ hostname_str = hostname_json.get("ietf-system:system", {"hostname": "error-oru"}).get("hostname", "error-oru")
+
+ # Add the session to the active_sessions dictionary
+ with session_lock:
+ active_sessions[session_id] = {'address': addr, 'session': mgr, 'hostname': hostname_str}
+ logger.info(f"Active sessions: {list(active_sessions.keys())}")
+
+ mgr.create_subscription()
+
+ self.sync_running(session_id)
+
+ while not stop_event.is_set():
+ try:
+ # Use a simple RPC like <get> to check if the session is alive
+ mgr.get(filter="<filter></filter>")
+ logger.debug(f"Session {session_id} with {hostname_str} {addr} is still active")
+
+ # Optionally receive notifications or perform actual tasks here
+ notification = mgr.take_notification(timeout=5)
+ if notification:
+ self.handle_notification(notification.notification_xml, session_id)
+
+ except SessionCloseError:
+ logger.error(f"Remote side closed the NETCONF session {session_id} from {addr}")
+ break
+ except TransportError as e:
+ logger.error(f"Transport error in session {session_id} from {addr}: {e}")
+ break
+
+ except Exception as e:
+ logger.error(f"Error handling session {session_id} from {addr}: {e}")
+ finally:
+ conn.close()
+ # Remove the session from the active_sessions dictionary
+ with session_lock:
+ if session_id in active_sessions:
+ self.netconf.running.delete_item(f"/o-ran-aggregation-base:aggregated-o-ru/aggregation[ru-instance=\"{active_sessions[session_id]['hostname']}\"]")
+ self.netconf.running.apply_changes()
+ del active_sessions[session_id]
+ logger.info(f"Session {session_id} with {addr} closed")
+ logger.debug(f"Active sessions: {list(active_sessions.keys())}")
+
+
+ def accept_tls_connections(self, host, port, max_connections=5):
+ """
+ Listens for incoming NETCONF CallHome TLS connections.
+ """
+ server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+ server_socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
+ server_socket.bind((host, port))
+ server_socket.listen(max_connections)
+ logger.info(f"Listening for CallHome TLS connections on {host}:{port}")
+
+ # Create an SSL context for mutual TLS authentication
+ context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
+ context.load_cert_chain(certfile=CERT_FILE, keyfile=KEY_FILE)
+ context.load_verify_locations(cafile=CA_CERT_FILE)
+ context.verify_mode = ssl.CERT_REQUIRED
+
+ session_id = 1
+ with ThreadPoolExecutor(max_workers=max_connections) as executor:
+ while not stop_event.is_set():
+ conn, addr = server_socket.accept()
+ # tls_conn = context.wrap_socket(conn)
+ logger.info(f"Accepted TLS connection from {addr}")
+ executor.submit(self.handle_callhome_session, conn, addr, session_id)
+ session_id += 1
+
+ def handle_notification(self, notification_xml, session_id) -> None:
+ logger.debug(f"Handling NETCONF notification: {notification_xml}")
+ # Parse the XML string
+ root = ET.fromstring(notification_xml)
+ # Namespace dictionary
+ namespaces = {
+ 'nc': 'urn:ietf:params:xml:ns:netconf:notification:1.0', # for the 'notification' element
+ }
+ # Find the eventTime element using the namespace
+ event_time_element = root.find('nc:eventTime', namespaces)
+
+ try:
+ with self.netconf.connection.get_ly_ctx() as ctx:
+ dnode = ctx.parse_op_mem("xml", notification_xml, DataType.NOTIF_NETCONF)
+ # parse_op_mem removes the <notification> and <eventTime> tags and retrieves only the notification itself.
+ # we need to add them back manually
+ j_str = dnode.print_mem("json", with_siblings=True)
+ j_obj = json.loads(j_str)
+ json_ev_time = {"eventTime": event_time_element.text}
+ json_notif = {"notifications:notification": json_ev_time | j_obj}
+
+ if 'ietf-netconf-notifications:netconf-config-change' in j_obj.keys():
+ self.sync_running(session_id)
+ self.send_ves_event_notification(json_notif, dnode.module().name(), dnode.name(), c2str(dnode.module().cdata.ns), active_sessions[session_id]['hostname'])
+ logger.debug(f"Received notification on {event_time_element.text} with content {json_notif}")
+ dnode.free()
+ except LibyangError as e:
+ logger.error(f"Failed to get JSON object from XML: {notification_xml}. Error: {e}")
+
+ def send_ves_event_notification(self, json_notif: str, module: str, notif_name: str, namespace: str, source_hostname: str) -> None:
+ logger.debug(f"Trying to wrap {module}:{notif_name} from namespace {namespace} which came from source {source_hostname}")
+ ves_event = VesEventNotificationWrapper(notif=json_notif, namespace=namespace, schema=module, notif_name=notif_name, source_oru=source_hostname)
+ self.ves.execute(ves_event)
+
+
+ def sync_running(self, session_id) -> None:
+ session_details = active_sessions[session_id]
+ mgr = session_details['session']
+ xml_data_str = mgr.get_config(source="running", filter="<filter><hw:hardware xmlns:hw=\"urn:ietf:params:xml:ns:yang:ietf-hardware\"/></filter>").data_xml
+
+ with self.netconf.connection.get_ly_ctx() as ctx:
+
+ ietf_hw_xml = self.get_xml_string_from_response(xml_data_str)
+ agg_base_xml = f"""<aggregated-o-ru xmlns="urn:o-ran:agg-base:1.0">
+ <aggregation>
+ <ru-instance>{session_details['hostname']}</ru-instance>
+ <ietf-hardware-model xmlns="urn:o-ran:agg-ietf-hardware:1.0">
+ {ietf_hw_xml}
+ </ietf-hardware-model>
+ </aggregation>
+ </aggregated-o-ru>
+ """
+
+ data = ctx.parse_data_mem(agg_base_xml, "xml", parse_only=True)
+
+ with self.netconf.connection.start_session("running") as sess:
+ sess.edit_batch_ly(data)
+ sess.apply_changes()
+
+ data.free()
+
+ def load_3gpp_data(self) -> None:
+ logger.info(f"Loading 3GPP data...")
+
+ _3gpp_managed_element_template = DictFactory.get_template("3gpp-managed-element")
+
+ _3gpp_managed_element_template.update_key(["_3gpp-common-managed-element:ManagedElement", 0, "_3gpp-nr-nrm-gnbdufunction:GNBDUFunction", 0, "attributes", "gNBDUName"], get_hostname())
+
+ with self.netconf.connection.start_session("running") as sess:
+ sess.edit_batch(_3gpp_managed_element_template.data, "_3gpp-common-managed-element")
+ sess.apply_changes()
+
+ def get_json_object_from_xml(self, xml_string) -> dict | None:
+ byte_array = bytearray(xml_string)
+ byte_array = byte_array.replace(b'<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">', b'')
+ byte_array = byte_array.replace(b'</data>', b'')
+ modified_byte_string = bytes(byte_array)
+
+ try:
+ with self.netconf.connection.get_ly_ctx() as ctx:
+ dnode = ctx.parse_data_mem(modified_byte_string, "xml", validate_present=True, no_state=True)
+ j_str = dnode.print_mem("json", with_siblings=True)
+ j_obj = json.loads(j_str)
+ dnode.free()
+ return j_obj
+ except LibyangError as e:
+ logger.error(f"Failed to get JSON object from XML: {xml_string}. Error: {e}")
+
+ def get_xml_string_from_response(self, input: str) -> str:
+ byte_array = bytearray(input)
+ byte_array = byte_array.replace(b'<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">', b'')
+ byte_array = byte_array.replace(b'</data>', b'')
+ modified_byte_array = bytes(byte_array)
+ modified_byte_string = modified_byte_array.decode('utf-8')
+
+ return modified_byte_string
+
+ def get_timestamp_from_xml_notification(self, input: str) -> str:
+ byte_array = bytearray(input)
+ byte_array = byte_array.replace(b'<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">', b'')
+ byte_array = byte_array.replace(b'</data>', b'')
+ modified_byte_array = bytes(byte_array)
+ modified_byte_string = modified_byte_array.decode('utf-8')
+
+ return modified_byte_string
+
+
+
+class _3GPP_ManagedElementTemplate(BaseTemplate):
+ """A dictionary template for _3gpp-common-managed-element:ManagedElement objects."""
+ def create_dict(self):
+ return {
+ "_3gpp-common-managed-element:ManagedElement": [
+ {
+ "id": "ManagedElement-001",
+ "attributes": {
+ "priorityLabel": 1
+ },
+ "_3gpp-nr-nrm-gnbdufunction:GNBDUFunction": [
+ {
+ "id": "GNBDUFunction-001",
+ "attributes": {
+ "priorityLabel": 1,
+ "gNBId": 1,
+ "gNBIdLength": 24,
+ "gNBDUId": 1,
+ "gNBDUName": "to_be_replaced"
+ },
+ "_3gpp-nr-nrm-nrcelldu:NRCellDU": [
+ {
+ "id": "NRCellDU-001",
+ "attributes": {
+ "priorityLabel": 1,
+ "cellLocalId": 1,
+ "pLMNInfoList": [
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 1,
+ "sd": "ff:ff:ff"
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 2,
+ "sd": "ff:ff:ff"
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 3,
+ "sd": "ff:ff:ff"
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 4,
+ "sd": "ff:ff:ff"
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 5,
+ "sd": "ff:ff:ff"
+ },
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sst": 6,
+ "sd": "ff:ff:ff"
+ }
+ ],
+ "nPNIdentityList": [
+ {
+ "idx": 0,
+ "plmnid": [
+ {
+ "mcc": "310",
+ "mnc": "410"
+ }
+ ],
+ "cAGIdList": "cAGIdList1",
+ "nIDList": "nIDList1"
+ }
+ ],
+ "nRPCI": 1,
+ "arfcnDL": 1,
+ "rimRSMonitoringStartTime": "2024-06-19T20:00:00Z",
+ "rimRSMonitoringStopTime": "2024-06-19T21:00:00Z",
+ "rimRSMonitoringWindowDuration": 1,
+ "rimRSMonitoringWindowStartingOffset": 1,
+ "rimRSMonitoringWindowPeriodicity": 1,
+ "rimRSMonitoringOccasionInterval": 1,
+ "rimRSMonitoringOccasionStartingOffset": 0,
+ "ssbFrequency": 1,
+ "ssbPeriodicity": 5,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 1,
+ "ssbDuration": 1,
+ "nRSectorCarrierRef": [
+ "CN=NR-Sector-Carrier-001"
+ ],
+ "victimSetRef": "CN=Victim-Set-001",
+ "aggressorSetRef": "CN=Aggressor-Set-001"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
+class VesEventNotificationWrapper(VesMessage):
+ def __init__(self, notif: dict, namespace: str = None, schema: str = None, notif_name: str = None, source_oru: str = None):
+ super().__init__()
+
+ self.data["event"]["stndDefinedFields"] = {
+ #"schemaReference": "https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob;f=data-model/yang/published/o-ran/ru-fh/o-ran-file-management.yang",
+ #"data": {},
+ "stndDefinedFieldsVersion": "1.0"
+ }
+
+ self.namespace = namespace
+ self.domain = "stndDefined"
+ self.priority = "Normal"
+ self.notification = notif
+ self.schema = schema
+ self.notif_name = notif_name
+ self.event_type = f"ORU-YANG/{self.schema}:{self.notif_name}"
+ self.source_oru = source_oru
+
+ def update(self) -> None:
+ super().update()
+
+ ves = Ves()
+
+ self.data["event"]["commonEventHeader"]["eventName"] = self.event_type
+ self.data["event"]["commonEventHeader"]["eventId"] = f"{self.domain}-ORU-YANG-{ves.seq_id}"
+
+ self.data["event"]["stndDefinedFields"]["data"] = self.notification
+ self.data["event"]["stndDefinedFields"]["schemaReference"] = f"https://o-ran-sc.org/any-standard-defined-message.yaml"
+
+ if self.source_oru is not None:
+ self.data["event"]["commonEventHeader"]["sourceName"] = self.source_oru
+ self.data["event"]["commonEventHeader"]["sourceId"] = self.source_oru
--- /dev/null
+# By default there is no requirements added here.
+# Add the requirements you need to this file.
+
+netconf-client
+ncclient
--- /dev/null
+import threading
+from util.logging import get_pynts_logger
+
+from core.config import Config
+from core.netconf import Netconf
+from core.ves import Ves, VesMessage
+from util.threading import sa_sleep
+
+logger = get_pynts_logger("feature-ves-pnfregistration")
+
+SEND_TIMEOUT = 10 # seconds
+
+class VesPnfRegistrationFeature:
+ def __init__(self) -> None:
+ self.ves: Ves = Ves()
+ self.listen_endpoints: list = []
+
+ def start(self) -> None:
+ self.netconf = Netconf()
+
+ self.get_listen_connections()
+ self.start_pnf_registration_thread()
+
+ def start_pnf_registration_thread(self):
+ logger.debug(f"Starting pnfRegistration thread...")
+ request_thread = threading.Thread(target=self.send_pnf_registrations_in_background)
+ request_thread.daemon = True # Set as daemon so it exits when the main program exits
+ request_thread.start()
+
+ def send_pnf_registrations_in_background(self):
+ logger.debug(f"Started pnfRegistration thread...")
+ success = {i: False for i in range(len(self.listen_endpoints))}
+ append_port = bool(len(self.listen_endpoints) > 1)
+
+ while not all(success.values()):
+ for i, instance in enumerate(self.listen_endpoints):
+ if not success[i]:
+ try:
+ if instance['isTls']:
+ pnf_registration_tls: VesMessage = VesPnfRegistrationTLS(instance['name'], instance['port'], append_port)
+ result = self.ves.execute(pnf_registration_tls)
+ if result is True:
+ success[i] = True
+ elif not instance['isTls']:
+ pnf_registration_ssh: VesMessage = VesPnfRegistrationSSH(instance['port'], instance['nc_user'], instance['nc_pass'], append_port)
+ result = self.ves.execute(pnf_registration_ssh)
+ if result is True:
+ success[i] = True
+ except Exception as e:
+ logger.error(f"Could not send vesPnfRegistration. Error: {e}")
+
+ # Wait 10 seconds before retrying any failed requests
+ if not all(success.values()):
+ remaining_requests = len([key for key, value in success.items() if not value])
+ logger.debug(f"Still need to send {remaining_requests} pnfRegistration messages...")
+ sa_sleep(SEND_TIMEOUT)
+
+ logger.info(f"VES pnfRegistration finished successfully!")
+
+ def get_listen_connections(self):
+ data = self.netconf.running.get_data("/ietf-netconf-server:netconf-server/listen/endpoints/endpoint")
+
+ endpoints = data
+ try:
+ for key in ['netconf-server', 'listen', 'endpoints', 'endpoint']:
+ endpoints = endpoints[key]
+
+ if isinstance(endpoints, list):
+ for endpoint in endpoints:
+ if 'tls' in endpoint:
+ try:
+ port = endpoint['tls']['tcp-server-parameters']['local-port']
+ name = endpoint['name']
+ self.listen_endpoints.append({'name': name, 'port': port, 'isTls': True})
+ logger.debug(f"Found TLS connection with port {port} and name {name}")
+ except KeyError as e:
+ logger.error(f"Could not find port in object {endpoint}. Error: {e}")
+ elif 'ssh' in endpoint:
+ try:
+ port = endpoint['ssh']['tcp-server-parameters']['local-port']
+ name = endpoint['name']
+ users = endpoint['ssh']['ssh-server-parameters']['client-authentication']['users']['user']
+ for user in users:
+ netconf_username = user['name']
+ netconf_password = user['password']
+ netconf_password = netconf_password[3:] # prune the $0$ string that is prepended to the password
+
+ self.listen_endpoints.append({'name': name, 'port': port, 'isTls': False, 'nc_user': netconf_username, 'nc_pass': netconf_password})
+ logger.debug(f"Found SSH connection with port {port} and name {name} and username {netconf_username} and pass {netconf_password}")
+ except KeyError as e:
+ logger.error(f"Could not find key in object {endpoint}. Error: {e}")
+ except KeyError as e:
+ logger.error(f"Keys not found in JSON object {data}. Error: {e}")
+ except TypeError as e:
+ logger.error(f"List not at the expected level in {data}. Error: {e}")
+
+
+
+
+
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+FROM pynts-base:latest
+
+COPY ./o-ru-mplane/docker/yang /usr/local/share/yang/modules/pynts
+COPY ./o-ru-mplane/docker/scripts/install_yangs.sh /opt/dev/scripts/install_yangs.sh
+
+RUN \
+ /opt/dev/scripts/install_yangs.sh
+
+COPY ./o-ru-mplane/src /app/extensions/o-ru-mplane
+RUN pip install -r /app/extensions/o-ru-mplane/requirements.txt
+
+WORKDIR /app
+
+ENV NETWORK_FUNCTION_TYPE="o-ru-ofmp"
+ENV HYBDIR_MPLANE=false
+
+EXPOSE 830
+CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
--- /dev/null
+<alarm-notif xmlns="urn:o-ran:fm:1.0">
+ <fault-id>1</fault-id>
+ <fault-source>object1</fault-source>
+ <affected-objects>
+ <name>affected_object1</name>
+ </affected-objects>
+ <fault-severity>CRITICAL</fault-severity>
+ <is-cleared>false</is-cleared>
+ <fault-text>Alarm text goes here..</fault-text>
+ <event-time>2024-08-01T10:00:03.12Z</event-time>
+</alarm-notif>
--- /dev/null
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "O-RU-Chassis",
+ "class": "iana-hardware:chassis",
+ "parent-rel-pos": 0,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-Board",
+ "class": "o-ran-hardware:O-RAN-RADIO",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 0,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-Board"
+ },
+
+ {
+ "name": "O-RU-BF-CAL",
+ "class": "o-ran-hardware:O-RU-BF-CAL",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 3,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-FEEDER",
+ "class": "o-ran-hardware:O-RU-FEEDER",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 4,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "O-RU-FPGA",
+ "class": "o-ran-hardware:O-RU-FPGA",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 5,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-FPGA"
+ },
+ {
+ "name": "O-RU-POWER-AMPLIFIER",
+ "class": "o-ran-hardware:O-RU-POWER-AMPLIFIER",
+ "parent": "O-RU-Chassis",
+ "parent-rel-pos": 6,
+ "alias": "concat(node-id, '-', component/name)",
+ "asset-id": "uuid(node-id, component/name)",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "o-ran-hardware:energy-saving-enabled": true,
+ "o-ran-hardware:o-ran-name": "O-RU-POWER-AMPLIFIER"
+ }
+ ]
+ }
+ }
+
\ No newline at end of file
--- /dev/null
+<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>eth2-UPlane-VLAN</name>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:l2vlan</type>
+ <enabled>true</enabled>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ </ipv4>
+ <vlan-id xmlns="urn:o-ran:interfaces:1.0">5</vlan-id>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">00:11:22:33:44:55</mac-address>
+ </interface>
+</interfaces>
--- /dev/null
+{
+ "ietf-interfaces:interfaces": {
+ "interface": [
+ {
+ "name": "x",
+ "description": "x",
+ "type": "iana-if-type:aluELP",
+ "enabled": true,
+ "ietf-ip:ipv4": {
+ "enabled": false,
+ "forwarding": true,
+ "mtu": 68,
+ "address": [
+ {
+ "ip": "152.132.103.50",
+ "prefix-length": 0
+ }
+ ],
+ "neighbor": [
+ {
+ "ip": "108.156.122.35",
+ "link-layer-address": "81"
+ }
+ ],
+ "ietf-network-instance:bind-ni-name": "x",
+ "o-ran-interfaces:m-plane-marking": 0,
+ "o-ran-interfaces:tcp": {
+ "mss-adjust": 0
+ },
+ "o-ran-interfaces:diffserv-markings": {
+ "u-plane-marking": 0,
+ "c-plane-marking": 0,
+ "s-plane-marking": 0,
+ "other-marking": 0,
+ "enhanced-uplane-markings": [
+ {
+ "up-marking-name": "x",
+ "enhanced-marking": 0
+ }
+ ]
+ }
+ },
+ "ietf-ip:ipv6": {
+ "enabled": false,
+ "forwarding": true,
+ "mtu": 1280,
+ "address": [
+ {
+ "ip": "::",
+ "prefix-length": 0
+ }
+ ],
+ "neighbor": [
+ {
+ "ip": "::",
+ "link-layer-address": "47"
+ }
+ ],
+ "dup-addr-detect-transmits": 0,
+ "autoconf": {
+ "create-global-addresses": true
+ },
+ "ietf-network-instance:bind-ni-name": "x",
+ "o-ran-interfaces:m-plane-marking": 0,
+ "o-ran-interfaces:tcp": {
+ "mss-adjust": 0
+ },
+ "o-ran-interfaces:diffserv-markings": {
+ "u-plane-marking": 0,
+ "c-plane-marking": 0,
+ "s-plane-marking": 0,
+ "other-marking": 0,
+ "enhanced-uplane-markings": [
+ {
+ "up-marking-name": "x",
+ "enhanced-marking": 0
+ }
+ ]
+ }
+ },
+ "ietf-network-instance:bind-ni-name": "x",
+ "ieee802-dot1x:pae": {
+ "pae-system": "x",
+ "vp-enable": false,
+ "port-capabilities": {
+ "supp": false,
+ "auth": true,
+ "mka": true,
+ "macsec": false,
+ "announcements": true,
+ "listener": false,
+ "virtual-ports": true,
+ "in-service-upgrades": true
+ },
+ "port-type": "virtual-port",
+ "supplicant": {
+ "held-period": 0,
+ "retry-max": 0
+ },
+ "authenticator": {
+ "quiet-period": 0,
+ "reauth-period": 0,
+ "reauth-enable": true,
+ "retry-max": 0
+ },
+ "kay": {
+ "enable": true,
+ "actor": {
+ "priority": 0
+ },
+ "key-server": {
+ "priority": 0
+ },
+ "group": {
+ "join": true,
+ "form": true,
+ "new": true
+ },
+ "macsec": {
+ "capable": true,
+ "desired": false
+ },
+ "suspend-on-request": true,
+ "suspend-for": 0,
+ "participants": [
+ {
+ "participant": 0,
+ "cached": false,
+ "active": false,
+ "retain": false,
+ "activate": "disabled"
+ }
+ ]
+ },
+ "logon-nid": {
+ "selected": "",
+ "pae-nid-group": [
+ {
+ "nid": "",
+ "use-eap": "immediate",
+ "unauth-allowed": "immediate",
+ "unsecure-allowed": "immediate",
+ "unauthenticated-access": "fallback-access",
+ "access-capabilities": "eap eapMkaMacSec vendorSpecific mkaMacSec mka"
+ }
+ ]
+ },
+ "announcer": {
+ "enable": false,
+ "announce": [
+ {
+ "announces": 0,
+ "pae-nid-group": [
+ {
+ "nid": "",
+ "use-eap": "immediate",
+ "unauth-allowed": "immediate",
+ "unsecure-allowed": "immediate",
+ "unauthenticated-access": "fallback-access",
+ "access-capabilities": "eapMkaMacSec mkaMacSec"
+ }
+ ]
+ }
+ ]
+ },
+ "listener": {
+ "enable": true
+ },
+ "logon-process": {
+ "logon": false
+ }
+ },
+ "o-ran-interfaces:l2-mtu": 64,
+ "o-ran-interfaces:vlan-tagging": true,
+ "o-ran-interfaces:class-of-service": {
+ "u-plane-marking": 0,
+ "c-plane-marking": 0,
+ "m-plane-marking": 0,
+ "s-plane-marking": 0,
+ "other-marking": 0,
+ "enhanced-uplane-markings": [
+ {
+ "up-marking-name": "x",
+ "enhanced-marking": 0
+ }
+ ]
+ },
+ "o-ran-interfaces:base-interface": "x",
+ "o-ran-interfaces:vlan-id": 1,
+ "o-ran-interfaces:alias-macs": [
+ "50:17:53:48:80:40"
+ ],
+ "o-ran-interfaces:mac-address": "26:13:00:15:00:71",
+ "o-ran-interfaces:port-reference": {
+ "port-name": "x",
+ "port-number": 0
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
--- /dev/null
+<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>eth2-UPlane-VLAN</name>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:l2vlan</type>
+ <enabled>true</enabled>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ </ipv4>
+ <vlan-id xmlns="urn:o-ran:interfaces:1.0">5</vlan-id>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">00:11:22:33:44:55</mac-address>
+ </interface>
+</interfaces>
--- /dev/null
+{
+ "ietf-netconf-acm:nacm": {
+ "enable-nacm": true,
+ "read-default": "permit",
+ "write-default": "deny",
+ "exec-default": "deny",
+ "enable-external-groups": false,
+ "groups": {
+ "group": [
+ {
+ "name": "sudo",
+ "user-name": [
+ "sudo",
+ "admin",
+ "demx8as6",
+ "netconf"
+ ]
+ },
+ {
+ "name": "nms",
+ "user-name": [
+ "nms",
+ "nero"
+ ]
+ },
+ {
+ "name": "fm-pm",
+ "user-name": [
+ "fm-pm",
+ "filippa"
+ ]
+ },
+ {
+ "name": "swm",
+ "user-name": [
+ "swm",
+ "swami"
+ ]
+ },
+ {
+ "name": "smo",
+ "user-name": [
+ "smo",
+ "simone"
+ ]
+ },
+ {
+ "name": "hybrid-odu",
+ "user-name": [
+ "hybrid-odu",
+ "haydon"
+ ]
+ },
+ {
+ "name": "carrier",
+ "user-name": [
+ "carrier",
+ "carron"
+ ]
+ }
+ ]
+ },
+ "rule-list": [
+ {
+ "name": "smo-rule",
+ "group": [
+ "smo"
+ ],
+ "rule": [
+ {
+ "name": "deny-ecpri",
+ "module-name": "o-ran-ecpri-delay",
+ "access-operations": "create update delete",
+ "action": "deny",
+ "comment": "Deny writing into ecpri."
+ },
+ {
+ "name": "allow-all",
+ "module-name": "*",
+ "access-operations": "*",
+ "action": "permit",
+ "comment": "Allow everything."
+ }
+ ]
+ },
+ {
+ "name": "admin-rule",
+ "group": [
+ "sudo",
+ "nms",
+ "fm-pm",
+ "swm",
+ "hybrid-odu",
+ "carrier"
+ ],
+ "rule": [
+ {
+ "name": "allow-all",
+ "module-name": "*",
+ "access-operations": "*",
+ "action": "permit",
+ "comment": "All is allowed, no restictions!"
+ }
+ ]
+ }
+ ]
+ }
+ }
+
\ No newline at end of file
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-odu-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt-odu",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "pynts-o-du-o1",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-odu"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:66:68:BD:65:1D:9B:45:54:42:1C:1D:85:33:E5:34:B4:8E:1B:95:F2",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-odu-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt-odu",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "pynts-o-du-o1",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-odu"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:66:68:BD:65:1D:9B:45:54:42:1C:1D:85:33:E5:34:B4:8E:1B:95:F2",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ },
+ {
+ "name": "default-smo-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt-smo",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "controller.dcn.smo.o-ran-sc.org",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-smo"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:CB:E3:29:E2:65:04:A8:DF:B3:63:E7:E4:1A:06:81:64:C6:DA:37",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-odu-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt-odu",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "172.20.0.5",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-odu"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:66:68:BD:65:1D:9B:45:54:42:1C:1D:85:33:E5:34:B4:8E:1B:95:F2",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ },
+ {
+ "name": "default-smo-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt-smo",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "controller.dcn.smo.o-ran-sc.org",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert-smo"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:CB:E3:29:E2:65:04:A8:DF:B3:63:E7:E4:1A:06:81:64:C6:DA:37",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-client",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "default-ssh-callhome",
+ "ssh": {
+ "tcp-client-parameters": {
+ "remote-address": "192.168.10.253",
+ "remote-port": 4334
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "ssh-endpoint-830",
+ "ssh": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 830
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+}
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "idle-timeout": 0,
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "ssh-endpoint-830",
+ "ssh": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 830
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "tls-endpoint-6513",
+ "tls": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 6513
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:0A:65:17:7F:E7:6D:2C:9A:8B:F1:AD:64:F9:EC:56:D7:36:F4:70",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": "netconf"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-callhome",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "default-ssh-callhome",
+ "ssh": {
+ "tcp-client-parameters": {
+ "remote-address": "192.168.10.253",
+ "remote-port": 4334
+ },
+ "ssh-server-parameters": {
+ "server-identity": {
+ "host-key": [
+ {
+ "name": "melacon-key",
+ "public-key": {
+ "central-keystore-reference": "serverkey-ssh"
+ }
+ }
+ ]
+ },
+ "client-authentication": {
+ "users": {
+ "user": [
+ {
+ "name": "netconf",
+ "password": "$0$netconf!"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ },
+ "reconnect-strategy": {
+ "start-with": "last-connected",
+ "max-wait": 1,
+ "max-attempts": 1
+ }
+ },
+ {
+ "name": "default-callhome-tls",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "192.168.10.253",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:DC:0A:65:17:7F:E7:6D:2C:9A:8B:F1:AD:64:F9:EC:56:D7:36:F4:70",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": "netconf"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ },
+ "reconnect-strategy": {
+ "start-with": "last-connected",
+ "max-wait": 1,
+ "max-attempts": 1
+ }
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "call-home": {
+ "netconf-client": [
+ {
+ "name": "default-client",
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-auth-endpt",
+ "tls": {
+ "tcp-client-parameters": {
+ "remote-address": "172.60.0.71",
+ "remote-port": 4335
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:e9:38:1f:f6:8b:62:de:0a:0b:c5:03:81:a8:03:49:a0:00:7f:8b:f3",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": "netconf"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "connection-type": {
+ "persistent": {}
+ }
+ }
+ ]
+ }
+ }
+}
--- /dev/null
+{
+ "ietf-netconf-server:netconf-server": {
+ "listen": {
+ "endpoints": {
+ "endpoint": [
+ {
+ "name": "tls-endpoint-6513",
+ "tls": {
+ "tcp-server-parameters": {
+ "local-address": "0.0.0.0",
+ "local-port": 6513
+ },
+ "tls-server-parameters": {
+ "server-identity": {
+ "certificate": {
+ "central-keystore-reference": {
+ "asymmetric-key": "serverkey-tls",
+ "certificate": "servercert"
+ }
+ }
+ },
+ "client-authentication": {
+ "ca-certs": {
+ "central-truststore-reference": "cacerts"
+ }
+ }
+ },
+ "netconf-server-parameters": {
+ "client-identity-mappings": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "02:02:00:6E:31:7C:65:CB:E0:72:37:5E:32:B2:AF:86:53:48:82:EC:98:3F",
+ "map-type": "ietf-x509-cert-to-name:specified",
+ "name": "netconf"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+}
--- /dev/null
+<ecpri-delay-message xmlns="urn:o-ran:message5:1.0">
+ <enable-message5>false</enable-message5>
+</ecpri-delay-message>
--- /dev/null
+{
+ "o-ran-mplane-int:mplane-info":{
+ "searchable-mplane-access-vlans-info":{
+ "searchable-access-vlans":[
+ 1
+ ],
+ "vlan-range":{
+ "lowest-vlan-id":1,
+ "highest-vlan-id":1
+ },
+ "scan-interval":0
+ },
+ "m-plane-interfaces":{
+ "m-plane-sub-interfaces":[
+ {
+ "interface-name":"x",
+ "sub-interface":"1"
+ }
+ ],
+ "m-plane-ssh-ports":{
+ "call-home-ssh-port":0,
+ "server-ssh-port":0
+ },
+ "m-plane-tls-ports":{
+ "call-home-tls-port":0,
+ "server-tls-port":0
+ }
+ },
+ "configured-client-info":{
+ "mplane-ipv4-info":[
+ {
+ "mplane-ipv4":"163.184.154.51%9",
+ "port":0
+ }
+ ],
+ "mplane-ipv6-info":[
+ {
+ "mplane-ipv6":"::",
+ "port":0
+ }
+ ],
+ "mplane-fqdn":[
+ "."
+ ]
+ }
+ }
+}
--- /dev/null
+<user-plane-configuration xmlns="urn:o-ran:uplane-conf:1.0">
+ <tx-array-carriers>
+ <name>Operator - 0 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>ACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-42</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+ <tx-array-carriers>
+ <name>Operator - 120 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>ACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-42</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+ <tx-array-carriers>
+ <name>Operator - 240 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>ACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-42</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+ <tx-array-carriers>
+ <name>Public Safety - 0 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>INACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-99</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+ <tx-array-carriers>
+ <name>Public Safety - 120 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>INACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-99</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+ <tx-array-carriers>
+ <name>Public Safety - 240 degrees</name>
+ <absolute-frequency-center>1800</absolute-frequency-center>
+ <center-of-channel-bandwidth>25000</center-of-channel-bandwidth>
+ <channel-bandwidth>56000</channel-bandwidth>
+ <active>INACTIVE</active>
+ <rw-duplex-scheme>FDD</rw-duplex-scheme>
+ <rw-type>NR</rw-type>
+ <band-number>46</band-number>
+ <laa-carrier-configuration>
+ <transmission-power-for-drs>-99</transmission-power-for-drs>
+ </laa-carrier-configuration>
+ <gain>3</gain>
+ <downlink-radio-frame-offset>0</downlink-radio-frame-offset>
+ <downlink-sfn-offset>0</downlink-sfn-offset>
+ </tx-array-carriers>
+
+ </user-plane-configuration>
--- /dev/null
+{
+ "o-ran-usermgmt:users":{
+ "user":[
+ {
+ "name":"x",
+ "account-type":"CERTIFICATE",
+ "password":"oiwtbqxj",
+ "enabled":true,
+ "sro-id":[
+ "x"
+ ]
+ }
+ ]
+ }
+}
--- /dev/null
+{
+ "o-ran-usermgmt:users":{
+ "user":[
+ {
+ "name":"x",
+ "account-type":"CERTIFICATE",
+ "password":"oiwtbqxj",
+ "enabled":true,
+ "sro-id":[
+ "x"
+ ]
+ }
+ ]
+ }
+}
--- /dev/null
+#!/usr/bin/env bash
+
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies GmbH and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+# env variables NP2_MODULE_DIR, NP2_MODULE_PERMS and LN2_MODULE_DIR must be defined
+# and NP2_MODULE_OWNER, NP2_MODULE_GROUP will be used if defined when executing this script!
+
+if [ -z "$NP2_MODULE_PERMS" -o -z "$PYNTS_MODULE_DIR" ]; then
+ echo "Required environment variables not defined!"
+ exit 1
+fi
+
+# import functions and modules arrays
+script_directory=$(dirname "$0")
+source "${script_directory}/common.sh"
+
+# array of modules to install
+MODULES=(
+"o-ran-ald.yang"
+"o-ran-ald-port.yang"
+"o-ran-antenna-calibration.yang"
+"o-ran-beamforming.yang"
+"o-ran-certificates.yang"
+"o-ran-common-identity-refs.yang"
+"o-ran-common-yang-types.yang"
+"o-ran-compression-factors.yang"
+"o-ran-delay-management.yang"
+"o-ran-dhcp.yang"
+"o-ran-ecpri-delay.yang"
+"o-ran-ethernet-forwarding.yang"
+"o-ran-externalio.yang"
+"o-ran-fan.yang"
+"o-ran-file-management.yang"
+"o-ran-fm.yang"
+"o-ran-hardware.yang -e ENERGYSAVING"
+"o-ran-ieee802-dot1q-cfm.yang"
+"o-ran-interfaces.yang"
+"o-ran-laa.yang"
+"o-ran-laa-operations.yang"
+"o-ran-lbm.yang"
+"o-ran-module-cap.yang"
+"o-ran-mplane-int.yang"
+"o-ran-operations.yang"
+"o-ran-performance-management.yang"
+"o-ran-processing-element.yang"
+"o-ran-shared-cell.yang"
+"o-ran-software-management.yang"
+"o-ran-supervision.yang"
+"o-ran-sync.yang"
+"o-ran-trace.yang"
+"o-ran-transceiver.yang"
+"o-ran-troubleshooting.yang"
+"o-ran-udp-echo.yang"
+"o-ran-uplane-conf.yang"
+"o-ran-usermgmt.yang -I /usr/local/share/yang/modules/pynts/o-ran-usermgmt.xml"
+"o-ran-ves-subscribed-notifications.yang"
+"o-ran-wg4-features.yang"
+)
+
+# get path to sysrepoctl executable, this will be stored in $SYSREPOCTL
+SYSREPOCTL_GET_PATH
+
+PYNTS_MODDIR=${DESTDIR}${PYNTS_MODULE_DIR}
+
+# get current modules
+SCTL_MODULES=`$SYSREPOCTL -l`
+
+# the install command will be stored in this variable
+CMD_INSTALL=
+
+SETUP_CMD "$PYNTS_MODDIR" "${MODULES[@]}"
+
+# install all the new modules
+if [ ! -z "${CMD_INSTALL}" ]; then
+ eval $CMD_INSTALL
+ rc=$?
+ if [ $rc -ne 0 ]; then
+ exit $rc
+ fi
+fi
--- /dev/null
+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: <https://datatracker.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+ Editor: Andy Bierman
+ <mailto:andy@yumaworks.com>
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+ Editor: Jie Dong
+ <mailto:jie.dong@huawei.com>
+ Editor: Dan Romascanu
+ <mailto:dromasca@gmail.com>";
+
+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";
+}
+
+}
--- /dev/null
+<nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm">
+ <enable-nacm>true</enable-nacm>
+ <groups>
+ <group>
+ <name>sudo</name>
+ <user-name>oranuser</user-name>
+ </group>
+ <group>
+ <name>smo</name>
+ </group>
+ <group>
+ <name>hybrid-odu</name>
+ </group>
+ <group>
+ <name>carrier</name>
+ </group>
+ <group>
+ <name>nms</name>
+ </group>
+ <group>
+ <name>fm-pm</name>
+ </group>
+ <group>
+ <name>swm</name>
+ </group>
+ </groups>
+ <rule-list>
+ <name>urn:o-ran:supervision:x.y</name>
+ <group>sudo</group>
+ <group>hybrid-odu</group>
+ <rule>
+ <name>o-ran:supervision:RWX</name>
+ <module-name>*</module-name>
+ <access-operations>*</access-operations>
+ <action>permit</action>
+ </rule>
+ </rule-list>
+ </nacm>
\ No newline at end of file
--- /dev/null
+module o-ran-ald-port {
+ yang-version 1.1;
+ namespace "urn:o-ran:ald-port:1.0";
+ prefix "o-ran-ald-port";
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ the Antenna Line Device capability.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 13.1.0
+
+ 1) Improve description of dc-control-support.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of O-RU Connectors for ALD Port.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) Typographical corrections for british english.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature OVERCURRENT-SUPPORTED {
+ description
+ "This feature indicates that the equipment supports the over-current notification
+ capability.";
+ }
+
+// Groupings
+
+ grouping aldport-group {
+ description "a port grouping ";
+ leaf over-current-supported {
+ type boolean;
+ config false;
+ description
+ "Set to TRUE when the equipment supports over-current notifications";
+ }
+
+ list ald-port {
+ key "name";
+
+ config false;
+
+ description
+ "Leaf nodes describing ALD Port";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique 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 indicates whether the control of on/off in the DC power supply is possible.
+ In case of False, power control is not supported and state of power supply will meet requiremments of ALD,
+ i.e. power supply always on for AISG 2.0 equipment.";
+ }
+
+ leaf dc-enabled-status {
+ when "../dc-control-support = 'true'";
+ type boolean;
+ default false;
+ description
+ "Status of DC voltage enabled on antenna line.
+ Valid only in case dc-control-support is true.";
+ }
+
+ 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.";
+ }
+
+ leaf-list related-o-ru-connectors {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR') or
+ derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-RS485')";
+ description
+ "Referenced name of O-RU connector(s) used by the ALD port. Note: plurality of connectors
+ related to single ALD port means, that HDLC stack is common for all of reported connectors.
+ When this node exists, value provided in node 'supported-connector' is ignored and leaf-list
+ 'supported-o-ru-connectors' takes precedence";
+ }
+ }
+
+ list ald-port-dc-control {
+ key "name";
+
+ description
+ "Container needed to manage DC on ALD ports";
+
+ leaf name {
+ type leafref {
+ path "/ald-ports-io/ald-port/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Name derived from unmodifiable list ald-port";
+ }
+
+ leaf dc-enabled{
+ type boolean;
+
+ description
+ "If dc-control-support is true case, this leaf is effective.
+ If dc-control-support is not true this leaf makes no action
+ In case of true, the power supply shall be turned on.";
+ }
+ }
+ }
+
+ grouping overcurrent-group {
+ description "overcurrent group";
+ 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";
+ }
+
+ leaf-list related-o-ru-connectors {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR') or
+ derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-RS485')";
+ description
+ "Optional extension to provide exact information about O-RU connector(s)
+ affected by overcurrent condition and related to specific ALD port
+ overcurrent condition has been reported.";
+ }
+ }
+ }
+
+ grouping dc-enabled-group {
+ description "dc enabled group";
+ list ald-port {
+ key name;
+ description
+ "list of ald-ports that has its dc-enabled-status changed";
+ leaf name{
+ type leafref {
+ path "/ald-ports-io/ald-port/name";
+ }
+ description "Name of port which has changed";
+ }
+ leaf dc-enabled-status{
+ type leafref {
+ path "/ald-ports-io/ald-port/dc-enabled-status";
+ }
+ description "New status of dc-enabled-status";
+ }
+ }
+ }
+
+// Top Level Container
+
+ container ald-ports-io {
+ description
+ "ALD port information.
+ ALD port of the equipment 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.";
+
+ uses aldport-group;
+ }
+
+ notification overcurrent-report {
+ if-feature OVERCURRENT-SUPPORTED;
+
+ description
+ "The equipment 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.";
+
+ uses overcurrent-group;
+ }
+
+ notification dc-enabled-status-change {
+ description
+ "The equipment is able to report the change of 'dc-enabled-status' of the ald-port.
+ This is applicable when the leaf 'dc-control-support' of the ald-pot is 'TRUE'.";
+
+ uses dc-enabled-group;
+ }
+}
--- /dev/null
+module o-ran-ald {
+ yang-version 1.1;
+ namespace "urn:o-ran:ald:1.0";
+ prefix "o-ran-ald";
+
+ import o-ran-ald-port {
+ prefix "ap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module for the ALD communication.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) Typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping ald-input {
+ description "a grouping for ald 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";
+ }
+ }
+
+ grouping ald-output {
+ description "a grouping for ald 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 O-RU";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of RPC handling seen from equipment 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";
+ }
+ }
+ // rpc-statements
+ rpc ald-communication {
+ description
+ "RPC to support communication between O-DU and Antenna Line Devices";
+
+ input {
+ uses ald-input;
+ }
+
+ output {
+ uses ald-output;
+ }
+ }
+}
--- /dev/null
+module o-ran-antenna-calibration {
+ yang-version 1.1;
+ namespace "urn:o-ran:antcal:1.0";
+ prefix "o-ran-antcal";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration required for supporting the optional
+ antenna calibration functionality.
+
+ Copyright 2024 the O-RAN 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:
+
+ * Redistribution of source code must retain the above copyright notice,
+ this list of conditions and the above disclaimer.
+ * Redistribution 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2024-04-15 {
+ description
+ "version 7.2.0
+
+ 1) fixing bug in coordinated-ant-calib-prep-timer.";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-12-01 {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-07-26 {
+ description
+ "version 7.0.0
+
+ 1) O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE is added as optional feature
+ to provide support for multiple antenna calibration time resources configurations.
+ 2) Flag for O-DU to control if O-RU is allowed to support this feature
+ 'coordinated-calibration-multiple-time-resources-allowed'
+ 3) defined grouping 'antenna-calibration-multiple-time-resource' from which list
+ for supporting multiple antenna calibration time resource configuration is supported.
+ 4) created new container 'antenna-calibration-multiple-time-resource' with list
+ 'antenna-calibration-multiple-time-resource-list' and key to index the list
+ 'antenna-calibration-time-resource-index'.
+ 5) added new notification 'antenna-calibration-multiple-time-resource-params' with
+ 'antenna-calibration-time-resource-index' as a leaf to indicate index of time resource
+ 6) Added support for configured preparedness timer for co-ordinated calibration";
+
+ reference "ORAN-WG4.MP-v07.00";
+ }
+
+ revision 2021-03-22 {
+ description
+ "version 5.1.0
+
+ 1) removing non-ASCII characters in model.";
+
+ reference "ORAN-WG4.MP-v05.00";
+ }
+
+
+ revision 2020-12-10 {
+ description
+ "version 5.0.0
+
+ 1) O-RU-COORDINATED-ANT-CAL is added as optional feature
+ to provide the antenna calibration without RPC
+ on the condition that coordinated-calibration-support is true
+ and coordinated-calibration-allowed is true.";
+
+ reference "ORAN-WG4.MP-v05.00";
+ }
+
+ revision 2019-07-03 {
+ description
+ "version 1.0.0
+
+ 1) Newly introduced model for supporting optional
+ antenna calibration functionality";
+
+ reference "ORAN-WG4.MP-v02.00";
+ }
+
+ feature O-RU-COORDINATED-ANT-CAL {
+ description
+ "Indicates that the O-RU needs user traffic to be co-ordinated from O-DU for antenna calibration.";
+ }
+
+ feature O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE {
+ description
+ "Indicates O-RU support for antenna calibration with multiple timing resource sets. Refer Section
+ 'Calibration with multiple timing resource sets' of M-Plane specification v7";
+ }
+
+ grouping antenna-calibration-capabilities {
+ description "container for collection of leafs for antenna calibration";
+
+ leaf self-calibration-support {
+ type boolean;
+ default false;
+ description
+ "Indicates whether O-RU supports self-calibration or not.
+
+ When true, indicates O-RU can initiate calibration without receiving an
+ RPC and/or impacting simultaneous CU-plane operation";
+ }
+ leaf coordinated-calibration-support {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ default false;
+ description
+ "True means the O-RU is able to determine priori the time-frequency
+ resources required for self-calibration and indicate those to the O-DU
+ in the antenna-calibration-coordinated notification.";
+ }
+ leaf number-of-calibration-symbols-per-block-dl {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-symbols-per-block-ul {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-blocks {
+ type uint8;
+ units symbols;
+ description
+ "if time interval is required between consecutive antenna calibration
+ operation, defines this time value as unit of symbols.
+
+ A common value is used here for the intervals
+ between DL-DL blocks, UL-UL blocks, DL-UL blocks and UL-DL blocks,
+ which is the largest minimum interval required between any two adjacent
+ calibration blocks.";
+ }
+ leaf number-of-calibration-blocks-per-step-dl {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-blocks-per-step-ul {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-steps {
+ type uint8;
+ units radio-frames;
+ description
+ "If time interval is required between consecutive step of antenna
+ calibration operation, defines this time value as unit of radio frames";
+ }
+ leaf number-of-calibration-steps {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many steps are required for whole DL/UL antenna
+ calibration operation";
+ }
+ leaf calibration-period {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint16;
+ units minutes;
+ description "periodical interval between antenna calibrations in the case of support of feature O-RU-COORDINATED-ANT-CAL";
+ }
+ leaf configured-preparation-timer-supported {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ default false;
+ description
+ "indicates if the O-RU supports configuration of the preparedness timer
+ that controls how far in advance of the co-ordinated self calibration
+ procedure the O-RU is required to send the notification of impacted
+ resources.";
+ }
+ }
+
+ grouping antenna-calibration-multiple-time-resource {
+ description
+ "Grouping for collection of leafs for antenna calibration capability of O-RU supporting
+ multiple time resource when feature O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE
+ is supported in the O-RU";
+
+ leaf number-of-calibration-symbols-per-block-dl {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-symbols-per-block-ul {
+ type uint8 {
+ range "1..max";
+ }
+ units symbols;
+ mandatory true;
+ description
+ "Indicates how many consecutive symbols are required for UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-blocks {
+ type uint8;
+ units symbols;
+ description
+ "if time interval is required between consecutive antenna calibration
+ operation, defines this time value as unit of symbols.
+
+ A common value is used here for the intervals
+ between DL-DL blocks, UL-UL blocks, DL-UL blocks and UL-DL blocks,
+ which is the largest minimum interval required between any two adjacent
+ calibration blocks.";
+ }
+ leaf number-of-calibration-blocks-per-step-dl {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of DL antenna
+ calibration operation";
+ }
+ leaf number-of-calibration-blocks-per-step-ul {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many blocks are required for one step of UL antenna
+ calibration operation";
+ }
+ leaf interval-between-calibration-steps {
+ type uint8;
+ units radio-frames;
+ description
+ "If time interval is required between consecutive step of antenna
+ calibration operation, defines this time value as unit of radio frames";
+ }
+ leaf number-of-calibration-steps {
+ type uint8 {
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates how many steps are required for whole DL/UL antenna
+ calibration operation";
+ }
+ leaf calibration-period {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint16;
+ units minutes;
+ description "periodical interval between antenna calibrations in the case of support of feature O-RU-COORDINATED-ANT-CAL";
+ }
+ }
+
+ grouping antenna-calibration {
+ container antenna-calibration-capabilities {
+ config false;
+ description
+ "Describes the antenna calibration capabilities";
+ uses antenna-calibration-capabilities;
+ }
+ container self-calibration-policy {
+ leaf self-calibration-allowed {
+ type boolean;
+ default false;
+ description
+ "whether the self-calibration is allowed by operator.
+ Note, self-calibration-allowed and coordinated-calibration-allowed cannot both be set to true";
+ }
+ leaf coordinated-calibration-allowed {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type boolean;
+ must "../self-calibration-allowed = 'false'";
+ default false;
+ description
+ "whether the coordinated-calibration is allowed by operator.
+
+ True means that O-DU may beneficially use the indicated time-frequency resources
+ to adapt its operation during the antenna calibration operation,
+ e.g., consider the time-frequency resources as reserved for calibration.
+ Both calibrations (self-calibration-allowed and coordinated-calibration-support) disallowed
+ or one of them allowed only";
+ }
+ leaf coordinated-ant-calib-prep-timer {
+ when "../coordinated-calibration-allowed = 'true'";
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ type uint8 {
+ range "2..10|60";
+ }
+ units seconds;
+ default 60;
+ description
+ "minimum time between O-RU sending notification of time-frequeny resources
+ for co-ordinated calibration to O-DU and O-RU starting co-ordinated
+ self-calibration procedure.
+
+ Note, the default value of 60 seconds is to accommodate earlier versions
+ which hard coded that value in the O-RAN.WG4.MP.0 specification.
+
+ An O-RU that has set configured-preparation-timer-supported=false shall
+ always use the default value of 60 seconds";
+ }
+ leaf coordinated-calibration-multiple-time-resources-allowed {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ type boolean;
+ default false;
+ description
+ "TRUE: O-RU is allowed to request for this calibration, FALSE: O-RU is prohibited to use this calibration";
+ }
+ description
+ "Describes the self calibration policies and configuration of the operator";
+ }
+
+ container antenna-calibration-multiple-time-resource {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ config false;
+ list antenna-calibration-multiple-time-resource-list {
+ key "antenna-calibration-time-resource-index";
+ uses antenna-calibration-multiple-time-resource;
+
+ leaf antenna-calibration-time-resource-index {
+ type uint8;
+ description
+ "Key for indexing 'antenna-calibration-multiple-time-resource-list'";
+ }
+ description
+ "List of antenna calibration time resource configuration indexed by
+ antenna calibration time resource index";
+ }
+ description
+ "Container to support multiple antenna calibration resource sets by defining
+ multiple calibration resources sets for different calibration types.";
+ }
+
+ description
+ "Describe the grouping set of antenna calibration";
+ }
+
+ grouping antenna-calibration-data {
+ description "information set for the operation of antenna calibration";
+
+ leaf symbol-bitmask-dl {
+ type string {
+ length "14";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration symbol within a calibration slot.
+ First character in the string indicate first symbol,
+ next character in the string indicate second symbol and so on.
+ Value 1 indicates that the symbol may be used for calibration
+ and 0 means the symbol shall not be used for calibration.";
+ }
+ leaf symbol-bitmask-ul {
+ type string {
+ length "14";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration symbol within a calibration slot.
+ First character in the string indicate first symbol,
+ next character in the string indicate second symbol and so on.
+ Value 1 indicates that the symbol may be used for calibration
+ and 0 means the symbol shall not be used for calibration.";
+ }
+ leaf slot-bitmask-dl {
+ type string {
+ length "10..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration slot within a calibration frame.
+ First character in the string indicate first slot,
+ next character in the string indicate second slot and so on.
+ Value 1 indicates that the slot may be used for calibration
+ and 0 means the slot shall not be used for calibration.";
+ }
+ leaf slot-bitmask-ul {
+ type string {
+ length "10..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration slot within a calibration frame.
+ First character in the string indicate first slot,
+ next character in the string indicate second slot and so on.
+ Value 1 indicates that the slot may be used for calibration
+ and 0 means the slot shall not be used for calibration.";
+ }
+ leaf frame-bitmask-dl {
+ type string {
+ length "1..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating DL calibration frame within a calibration step.
+ First character in the string indicate first radio frame equal to
+ the start-SFN, next character in the string indicate the next frame
+ and so on.
+
+ Value 1 indicates that the frame may be used for calibration
+ and 0 means the frame shall not be used for calibration.";
+ }
+ leaf frame-bitmask-ul {
+ type string {
+ length "1..255";
+ pattern "[01]*";
+ }
+ mandatory true;
+ description
+ "Bit-mask indicating UL calibration frame within a calibration step.
+ First character in the string indicate first radio frame equal to
+ the start-SFN, next character in the string indicate the next frame
+ and so on.
+
+ Value 1 indicates that the frame is may be used for calibration
+ and 0 means the frame shall not be used for calibration.";
+ }
+ leaf calibration-step-size {
+ type uint8;
+ mandatory true;
+ description " Number of frames within a calibration step";
+ }
+ leaf calibration-step-number {
+ type uint8;
+ mandatory true;
+ description "Number of calibration steps";
+ }
+ leaf start-sfn {
+ type uint16 {
+ range "0..1023";
+ }
+ mandatory true;
+ description "start SFN number of the first calibration step";
+ }
+ }
+
+ container antenna-calibration {
+ uses antenna-calibration;
+ description
+ "Describes the antenna calibration top node";
+ }
+
+ rpc start-antenna-calibration {
+ description
+ "The antenna calibration operation can start when NETCONF client sends a
+ calibration start command with resource allocation parameters.
+ These parameters indicate how the O-RU can perform the antenna
+ calibration operation; at which Symbol, Slot, and Frame.
+ This scheduling information can be generated by O-RU itself.
+ However, in a dynamic TDD environment, the DL and UL configuration
+ is only determined and known by O-DU. Consequently, only O-DU (NETCONF
+ client ) can determine and configure the scheduling and resource
+ allocation permitted for use by the antenna calibration operation";
+ input {
+ uses antenna-calibration-data;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description
+ "Status information to indicate that O-RU accepted RPC
+ antenna calibration start request";
+ }
+ enum REJECTED {
+ description
+ "Status information to indicate that O-RU rejected RPC antenna
+ calibration start request";
+ }
+ }
+ mandatory true;
+ description
+ "Status of whether antenna calibration trigger by RPC is accepted
+ by the O-RU";
+ }
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "Detailed error Message when the status is rejected, e.g.,
+ because O-RU can not start antenna calibration
+ such as already running antenna calibration,
+ resource mask mismatch with O-RU antenna calibration capability,
+ overlapped DL and UL masks, insufficient memory, O-RU internal reason";
+ }
+ }
+ }
+
+ notification antenna-calibration-required {
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+
+ description
+ "this notification indicates that the antenna calibration is required in O-RU";
+ }
+
+ notification antenna-calibration-coordinated {
+ if-feature O-RU-COORDINATED-ANT-CAL;
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+ uses antenna-calibration-data {
+ description
+ "In the case of support of feature O-RU-COORDINATED-ANT-CAL,
+ time-frequency resource determined by O-RU will be included";
+ }
+
+ description
+ "this notification indicates that co-ordinated antenna calibration is provided in O-RU.
+ It indicates the time-frequency resources will be sent to a subscribed O-DU at least coordinated-ant-calib-prep-timer seconds
+ before the operation of the co-ordinated antenna calibration procedure.";
+ }
+
+ notification antenna-calibration-result {
+ leaf status {
+ type enumeration {
+ enum SUCCESS {
+ description "O-RU has succeeded in calibrating its antenna";
+ }
+ enum FAILURE {
+ description
+ "O-RU attemted to calibrate its antenna, but the procedure failed.";
+ }
+ }
+ mandatory true;
+ description
+ "Status of the antenna calibration procedure which has been triggered
+ by accepting an start-antenna-calibration RPC.";
+ }
+ leaf detailed-reason {
+ when "../status='FAILURE'";
+ type string;
+ description
+ "Detailed reason when the status is FAILURE, e.g.,
+ O-RU cannot complete the antenna calibration
+ because of lack of memory, self-calibration failure, etc";
+ }
+ description
+ "This notification indicates the antenna calibration result";
+ }
+
+ notification antenna-calibration-multiple-time-resource-params {
+ if-feature "O-RU-COORDINATED-ANT-CAL and O-RU-COORDINATED-ANT-CAL-MULTIPLE-TIME-RESOURCE";
+ leaf antenna-calibration-time-resource-index {
+ type uint8;
+ description
+ "Index to use applicable antenna calibration time resources from the
+ list 'antenna-calibration-multiple-time-resource-list'";
+ }
+ list dl-calibration-frequency-chunk {
+ leaf start-calibration-frequency-dl {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-dl {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ DL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of DL spectrum chunk affected by calibration process";
+ }
+ list ul-calibration-frequency-chunk {
+ leaf start-calibration-frequency-ul {
+ type uint64;
+ description
+ "lowest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ leaf end-calibration-frequency-ul {
+ type uint64;
+ description
+ "highest frequency value in Hz of the frequency range is required for
+ UL antenna calibration operation.";
+ }
+ description
+ "min/max frequency of UL spectrum chunk affected by calibration process";
+ }
+
+ description
+ "This notification indicates sending parameters related to supporting antenna calibration
+ with multiple time resource";
+ }
+}
--- /dev/null
+module o-ran-beamforming {
+ yang-version 1.1;
+ namespace "urn:o-ran:beamforming:1.0";
+ prefix "o-ran-bf";
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the beamforming capabilities of an O-RU.
+ Only O-RUs that support beamforming shall support this module.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add DMRS-BF capabilities.
+ 2) add new capability to update beamforming configuration without deactive tx/rx-array-carrier ";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) clarifying descriptions inside capabilities-group.
+ 2) add support for multiple beamid tables.
+ 3) remove import by revision date for o-ran-compression-factors. ";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 11.1.0
+
+ 1) Added h(k) mapping ";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) introduce p-dash parameter";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 8.1.0
+
+ 1) clarified description statements for component carrier
+ 2) clarified path/folder description";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Configuration for Beamforming weights were added together with changes and updates
+ to compressions.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 2.3.0
+
+ 1) Ensuring beam-ids can only be 15 bits.
+ 2) Correcting maximum number of UEs from 8 bit to 15 bit";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+ revision "2021-03-22" {
+ description
+ "version 2.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 2.1.0
+
+ 1) corrected error where typedef refers to deprecated beam-id by
+ introducing new typedef and deprecating leafs defining coarse/fine
+ relationships that refer to beam-id and replacing with new ones based
+ on capability grouping";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) re-designed/switched from per band to per capabilities-group for
+ addition flexibility
+ 2) added in new beam tilt feature
+ 3) adding possibilities to provide more compression types for beamforming
+ 4) Adding possibility to configure beamforming per capabilities group
+ 5) corrected xPATH boolean check from TRUE to true";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature MODIFY-BF-CONFIG {
+ description
+ "This feature indicates that the O-RU supports an optional feature to
+ modify beamforming configuration information";
+ }
+
+ feature BEAM-TILT {
+ description
+ "This feature indicates that the O-RU supports an optional feature to
+ allows to shift beam characteristic of all predefined-beams in elevation
+ and/or azimuth direction (i.e. changing the service area or sector
+ coverage) while preserving the beam adjacency among the beams within
+ the service area ";
+ }
+
+ typedef EQ-SCALING-FUNCTION-TYPE{
+ type enumeration {
+ enum SCALING-F-1 {
+ description
+ "For scaling function 1, G = SINR/(1+SINR) ";
+ }
+ enum SCALING-F-2 {
+ description
+ "For scaling function 2, G = 1";
+ }
+ }
+
+ description
+ "DMRS-BF-EQ, scaling function type";
+ }
+
+ typedef beam-reference {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:per-band-config/o-ran-bf:beam-information/o-ran-bf:beamforming-properties/o-ran-bf:beam-id";
+ }
+ description
+ "This type is used by data models that need to reference a beam.";
+ }
+
+ typedef beam-capabilities-reference {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:beam-information/o-ran-bf:beamforming-properties/o-ran-bf:beam-id";
+ }
+ description
+ "This type is used by data models that need to reference a beam based on capability group.";
+ }
+
+ grouping beamforming-parameters {
+ leaf max-number-of-beam-ids {
+ type uint16 {
+ range "min .. 32767";
+ }
+
+ mandatory true;
+ description
+ "Maximum number of supported Beam ID assigned to domain beamforming control";
+ }
+
+ leaf initial-beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "First Beam ID that can be used for addressing of domain beams";
+ }
+
+ description "Group of common beamforming parameters";
+ }
+
+ grouping granularity-parameters {
+ leaf frequency-granularity {
+ type enumeration {
+ enum CC {
+ description
+ "Frequency granularity: per Component Carrier";
+ }
+
+ enum BAND {
+ description
+ "Frequency granularity: per band";
+ }
+ }
+ mandatory true;
+ description "Supported time granularity of time-domain beamforming.";
+ }
+
+ leaf time-granularity {
+ type enumeration {
+ enum SLOT {
+ description
+ "Time granularity: per slot";
+ }
+
+ enum SYMBOL {
+ description
+ "Time granularity: per symbol";
+ }
+ }
+ mandatory true;
+ description "Supported time granularity of time-domain beamforming.";
+ }
+ description "";
+ }
+
+ grouping array-lists {
+ description
+ "Grouping for array lists";
+
+ 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";
+ }
+ }
+
+ grouping static-properties {
+ description
+ "Defines static properties for real-time beamforming which apply to different beamforming types
+ i.e. time, frequency or hybrid beamforming type";
+
+ leaf rt-bf-weights-update-support {
+ type boolean;
+ description
+ "The parameter informs if O-RU supports real time beamforming weights update through C-Plane messaging";
+ }
+
+ choice beamforming-type {
+ case frequency {
+ container frequency-domain-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing frequency domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry. The index
+ values to be used for this list shall be restricted by O-RU advertised
+ values 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes'.";
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports beamforming in frequency domain.";
+ }
+
+ case time {
+ container time-domain-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses granularity-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing time-domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry.The index
+ values to be used for this list shall be restricted by O-RU advertised
+ valuues 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes'.";
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports beamforming in time domain.";
+ }
+
+ case hybrid {
+ container hybrid-beams {
+ when "../rt-bf-weights-update-support = 'true'";
+ uses beamforming-parameters;
+ uses granularity-parameters;
+ uses cf:bf-compression-details;
+
+ list additional-compression-method-supported {
+ uses cf:bf-compression-details;
+
+ description
+ "List of additional supported compression methods by O-RU";
+ }
+
+ list beamforming-params-for-mul-beamId-tables {
+ if-feature "feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ uses beamforming-parameters;
+
+ description
+ "List containing hybrid-domain beamId ranges for each of the
+ beamId table supported for a given capabilities[] list entry.The index
+ values to be used for this list shall be restricted by O-RU advertised
+ values 'tx-array-beamId-table-indexes/rx-array-beamId table-indexes'.";
+ }
+
+ list fd-weights-mapping {
+ key "fd-weight-number";
+ description
+ "Mapping of array elements to frequency domain beamforming weight.
+ See h(k) in O-RAN CUS-Plane, clause 12.5.3";
+
+ leaf fd-weight-number {
+ type uint16;
+ description
+ "Frequency domain beamforming weight number.
+ See k' in O-RAN CUS-Plane, clause 12.5.3";
+ }
+
+ leaf-list array-elements {
+ type uint16;
+ description
+ "List of array elements mapped to the frequency domain beamforming weight number.
+ See k in O-RAN CUS-Plane, clause 12.5.3";
+ }
+ }
+
+ description "";
+ }
+ description "Set of parameters valid for O-RU, that supports hybrid beamforming - in both time and frequency domain.";
+ }
+ description
+ "This value indicates beamforming type supported by O-RU";
+ }
+
+ leaf number-of-beams {
+ type uint16;
+ status deprecated;
+ description
+ "This value indicates the max number of beam patterns O-RU can generate
+ and apply to the signal of each O-RU port (both DL and UL).
+ This value is equivalent to the maximum number of used beam IDs within
+ a capability group for a specific beamforming type. This value can also
+ be interpreted as a difference between 'initial-beam-id' and 'max-number-of-beam-ids'
+ for each beamforming-type";
+ }
+
+ leaf p-dash {
+ type uint16;
+ description
+ "This parameters specifies the dimesionality of the time-domain beamforming operation. Refer to description of parameter p'
+ in clause 12.4.3.4.2 of CUS-Plane specification. This parameter is required to define the size of time-domain beamforming
+ vector in case of hybrid/time-domain beamforming is supported by O-RU";
+ }
+ }
+
+ grouping beamforming-property {
+ description
+ "Grouping for beamforming property";
+
+ leaf beam-type {
+ type enumeration {
+ enum COARSE {
+ description "the beam-id corresponds to a coarse beam";
+ }
+ enum FINE {
+ description "the beam-id corresponds to a fine beam";
+ }
+ }
+ description
+ "This value indicates the beam resolution.";
+ }
+
+ leaf beam-group-id {
+ type uint16;
+ description
+ "Beams with same beamGroupsID can be transmitted simultaneously.";
+ }
+
+ leaf-list coarse-fine-beam-relation {
+ type beam-reference;
+ status deprecated;
+ description
+ "List of related coarse/fine beam.";
+ }
+
+ leaf-list neighbour-beams {
+ type beam-reference;
+ status deprecated;
+ description
+ "A list of neighbour beams which might restrict co-scheduling due
+ to interference.";
+ }
+
+ leaf-list coarse-fine-beam-capability-based-relation {
+ type beam-capabilities-reference;
+ description
+ "List of related coarse/fine beam.";
+ }
+
+ leaf-list neighbour-beams-capability-based {
+ type beam-capabilities-reference;
+ description
+ "A list of neighbour beams which might restrict co-scheduling due
+ to interference.";
+ }
+ }
+
+ grouping beamforming-properties-element {
+ description
+ "Grouping for beamforming-properties element";
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ 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.";
+
+ uses beamforming-property;
+ }
+ }
+
+ grouping band-num {
+ description
+ "Band information for the beamforming
+ related to the band number from module capabilities";
+
+ 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";
+ }
+ }
+
+ grouping cap-group {
+ description
+ "Capabilities group grouping";
+
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number to which it refers.";
+ }
+
+ }
+
+ grouping per-band-config-element {
+ description
+ "Grouping for per band config element";
+
+ uses band-num;
+ uses array-lists;
+
+ container static-properties {
+ description
+ "the static beamforming related information";
+
+ uses static-properties;
+ }
+
+ container beam-information {
+ description
+ "Beam information which exposes beamforming related O-RU capabilities. Specifies beam properties for
+ predefined beamforming as described in clause 'Predefined-beam beamforming' of CUS-Plane specification";
+
+ 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 O-RU.
+ These parameters can be used by the beamforming control by the NETCONF client.
+ 'numberOfBeamformingProperties' indicates the size of the array.";
+
+ uses beamforming-properties-element;
+ }
+ }
+ }
+ grouping dmrs-bf-gen-capabilities {
+ description "Capabilities for DMRS-BF O-RU";
+ leaf equalization-data-scaling {
+ if-feature feat:DMRS-BF-EQ;
+ type EQ-SCALING-FUNCTION-TYPE;
+ description "Scaling function supported by this O-RU";
+ }
+ leaf max-num-ues-supported{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of UE supported by the O-RU using DMRS-BF";
+ }
+ leaf ueid-max-layer-bits{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint8 {
+ range "1 .. 4";
+ }
+ description
+ "Indicates the maximum number of bits in ueid to represent the layers of a UE";
+ }
+ leaf max-num-ueids{
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of unique ueId values within the 'ueId' space that
+ may be used by the O-DU(s). The 'ueId' space ranges from ueId = 0 to ueId = U-1,
+ where U equals the product of the O-RU advertised parameter 'max-num-ues-supported'
+ and 2^ueid-layer-bits-configured configured by the O-DU. This limit counts all
+ unique ueId values used by the O-DU(s) at any time. Refer to CUS-Plane specification,
+ clause 7.5.3.10.";
+ }
+ }
+
+ grouping operational-properties {
+ description
+ "Grouping for operational properties";
+
+ leaf number-of-writeable-beamforming-files {
+ type uint8 {
+ range "1 .. max";
+ }
+ mandatory true;
+ description
+ "This leaf indicates the maximum number of writable beamforming files
+ containing beamweights and/or attributes that the O-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 O-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 O-RU supports the capability
+ to store the modified beamforming weight information file in the
+ reset persistent memory";
+ }
+
+ leaf in-service-bf-update {
+ when "../update-bf-non-delete = 'true'";
+ type boolean;
+ default false;
+ description
+ "When set to TRUE, indicates that an O-RU supports the capability
+ to apply the modified beamforming weight information by using RPC
+ activate-beamforming-config or activate-beamforming-config-by-capability-group without deactivating of tx-array-carriers and
+ rx-array-carriers.
+ when O-RU doesn't support the capability 'update-bf-non-delete',
+ the capability in-service-bf-update shall not be supported.";
+ }
+ }
+
+ grouping beamforming-supported-type {
+ description
+ "Grouping for type of beamforming supported";
+
+ leaf beamforming-trough-attributes-supported {
+ type boolean;
+ config false;
+ description
+ "Informs if beamforming can be controlled providing attributes to O-RU
+ (like angles, beamwidth).";
+ }
+
+ leaf beamforming-trough-ue-channel-info-supported {
+ type boolean;
+ config false;
+ description
+ "Informs if beamforming can be controlled by UE information.";
+ }
+ }
+
+ grouping beamforming-config {
+ description
+ "Grouping for beamforming configuration";
+
+ list per-band-config {
+ key band-number;
+ config false;
+ status deprecated;
+ description "beamforming information per band";
+ uses per-band-config-element;
+ }
+
+ list capabilities-groups {
+ key capabilities-group;
+ description
+ "Capabilities groups identification number assigned to be referenced by operations
+ and notifications.
+ This also help to group particular beamforming capabilities and bind it with arrays";
+
+ leaf capabilities-group {
+ type uint16;
+ description
+ "Capabilities group identification number. Number which is used just for reference in RPC
+ and notification";
+ }
+ uses per-band-config-element;
+ }
+
+ container ue-specific-beamforming {
+ presence
+ "Indicates that the O-RU supports optional Section Type '6' Fields
+ (used for sending channel information for a specific UE)";
+ config false;
+ description
+ "Information related to support by the O-RU of Section Type 6 for
+ signalling UE-specific channel information to the O-RU";
+
+ leaf max-number-of-ues {
+ type uint8;
+ status deprecated;
+ description
+ "Indicates the maximum number of UE -specific channel information
+ data sets supported by the O-RU.
+
+ Leaf is deprecated as it only enabled a maximum of 255 UEs to be supported,
+ compared with ST5 and ST6 which supports a 15 bit value.
+
+ NETCONF client instead uses max-number-ues-15bit schema node";
+ }
+ leaf max-number-of-ues-15bit {
+ type uint16 {
+ range "1 .. 32767";
+ }
+ description
+ "Indicates the maximum number of UE -specific channel information
+ data sets supported by the O-RU,
+ It is restricted to 15 bits value because of the 15bits ueId field in ST5 and ST6";
+ }
+
+ leaf-list channel-information-compression-method-supported {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ type cf:ci-compression-method-def;
+ description
+ "list of channel information compression methods supported by the O-RU";
+ }
+
+ leaf dynamic-channel-information-compression-supported {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ type boolean;
+ description
+ "Informs if dynamic channel information compression supported by the O-RU,
+ if its value is true, the compression method and IQ bit width can be dynamic in ciCompHdr;
+ if its value is false, only static configuration compression configuration is supported, and ciCompHdr
+ shall be set to a fixed value corresponding to the static configured compression method and IQ bit width.";
+ }
+ }
+ container operational-properties {
+ if-feature MODIFY-BF-CONFIG;
+ config false;
+ description "properties for dynamic beam weight/attribute support";
+
+ uses operational-properties;
+ }
+ container dmrs-bf-general-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ config false;
+ description "general DMRS-BF capabilities";
+
+ uses dmrs-bf-gen-capabilities;
+ }
+ }
+
+ grouping beam-tilt-configuration {
+ description "grouping for beam-tilt feature";
+ list predefined-beam-tilt-offset {
+ if-feature BEAM-TILT;
+ key capabilities-group;
+ description "Configuration of the predefined-beam-tilt-offset per capabilities-group";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ require-instance false;
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-offset relates to";
+ }
+ leaf elevation-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units degrees;
+ default 0;
+ description
+ "Value 0 represents the default service area of the predefined-beams
+ in elevation domain, i.e. no tilt offset.
+
+ Values smaller than 0 represents an up-shift of the default service area
+ towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+ values larger than 0 represent a down-shift of the default service area
+ away from the zenith (i.e., corresponding to an increase in zenith angle).
+
+ If the value is greater than the maximum supported angle, then the maximum
+ angle is used for configuration.
+ If the value is less than the minimum supported angle, then the minimum
+ angle is used for configuration.
+ The actual angle used is (angle DIV granularity) * granularity.
+
+ Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+ its offset angle to its default value.";
+ }
+ leaf azimuth-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units degrees;
+ default 0;
+ description
+ "Value 0 represents the default service area of the predefined-beams
+ in azimuth domain, i.e., no tile offset.
+
+ Azimuth tilt offset angle, represents counter-clockwise rotation around
+ z-axis. I.e., assuming view from the UE (observation of the O-RU
+ from the front), value larger than 0 and smaller than 0
+ respectively represent right-shifted and left-shifted of the default
+ service area in azimuth domain.
+
+ If the value is greater than the maximum supported angle, then the maximum
+ angle is used for configuration.
+ If the value is less than the minimum supported angle, then the minimum
+ angle is used for configuration.
+ The actual angle used is (angle DIV granularity) * granularity.
+
+ Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+ its offset angle to its default value.";
+ }
+ }
+ }
+
+ grouping beam-tilt-state {
+ description
+ "Grouping for beam tilt state";
+
+ list predefined-beam-tilt-offset-information {
+ key capabilities-group;
+ config false;
+ description
+ "Information which exposes predefined-beam-tilt-offset related O-RU capabilities.";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-offset-information relates to";
+ }
+ leaf elevation-tilt-offset-granularity {
+ type uint8 {
+ range "0..30";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Indication of the supported granularity for the
+ predefined-beam-tilt-offset in elevation domain.
+
+ Value 0 represents that the O-RU doesn't support
+ the predefined-beam-tilt-offset in elevation domain.";
+ }
+ leaf azimuth-tilt-offset-granularity {
+ type uint8 {
+ range "0..30";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Indication of the supported granularity for the
+ predefined-beam-tilt-offset in azimuth domain.
+
+ Value '0' represents that the O-RU doesn't support
+ the predefined-beam-tilt-offset in azimuth domain.";
+ }
+ leaf minimum-supported-elevation-tilt-offset {
+ type int16 {
+ range "-90..0";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The minimum value which can be configured for
+ 'elevation-tilt-offset-angle'.";
+ }
+ leaf maximum-supported-elevation-tilt-offset {
+ type int16 {
+ range "0..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The maximum value which can be configured for
+ 'elevation-tilt-offset-angle'.";
+ }
+ leaf minimum-supported-azimuth-tilt-offset {
+ type int16 {
+ range "-90..0";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The minimum value which can be configured for
+ 'azimuth-tilt-offset-angle'.";
+ }
+ leaf maximum-supported-azimuth-tilt-offset {
+ type int16 {
+ range "0..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "The maximum value which can be configured for
+ 'azimuth-tilt-offset-angle'.";
+ }
+ leaf run-time-tilt-offset-supported {
+ type boolean;
+ mandatory true;
+ description
+ "If 'run-time-tilt-offset-supported' is FALSE, changing the values in
+ 'predefined-beam-tilt-offset' for a specific band shall be allowed only
+ if all 'tx-array-carriers' and 'rx-array-carriers' corresponding
+ to the band are INACTIVE.";
+ }
+ }
+
+ }
+
+ grouping beam-tilt-report {
+ description
+ "Grouping for beam tilt report";
+
+ list predefined-beam-tilt-state {
+ key capabilities-group;
+ config false;
+ description
+ "Information which exposes state of predefined-beam-tilt-offset.";
+ leaf capabilities-group {
+ type leafref {
+ path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+ }
+ mandatory true;
+ description
+ "Capabilities group identification number for which
+ the predefined-beam-tilt-state relates to";
+ }
+ leaf elevation-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Value 'zero' represents the default service area of the
+ predefined-beams in elevation domain.
+
+ Values smaller than 0 represents an up-shift of the default service area
+ towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+ values larger than 0 represent a down-shift of the default service area
+ away from the zenith (i.e., corresponding to an increase in zenith angle).";
+ }
+ leaf azimuth-tilt-offset-angle {
+ type int16 {
+ range "-90..90";
+ }
+ units Degrees;
+ mandatory true;
+ description
+ "Value 'zero' represents the default service area of the
+ predefined-beams in azimuth domain.
+
+ Azimuth tilt offset angle, represents counter-clockwise rotation around
+ z-axis. I.e., assuming view from the UE (observation of the O-RU from
+ the front), value larger than 'zero' and smaller than 'zero'
+ respectively represent right-shifted and left-shifted of the default
+ service area in azimuth domain.";
+ }
+ }
+
+ }
+
+ container beamforming-config {
+ config false;
+ description
+ "A set of configuration data for the O-RU's beam forming functionality";
+
+ uses beamforming-config;
+ uses beamforming-supported-type;
+ container beam-tilt {
+ if-feature BEAM-TILT;
+ description "container for pre-defined beam tilt feature";
+ uses beam-tilt-state;
+ uses beam-tilt-report;
+ }
+ }
+
+
+ rpc activate-beamforming-config {
+ if-feature MODIFY-BF-CONFIG;
+ description
+ "RPC to activate beamforming config information by indicating the file
+ stored in the folder o-ran/beamforming in advance";
+ input {
+ leaf beamforming-config-file {
+ type string;
+ mandatory true;
+ description
+ "file name stored in o-ran/beamforming folder is indicated";
+ }
+
+ uses band-num;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the beamforming weight/attribute file";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the beamforming weight/attribute file. The O-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.";
+ }
+ }
+ }
+
+ rpc activate-beamforming-config-by-capability-group {
+ if-feature MODIFY-BF-CONFIG;
+ description
+ "RPC to activate beamforming config information by indicating the file
+ stored in the folder o-ran/beamforming in advance";
+ input {
+ leaf beamforming-config-file {
+ type string;
+ mandatory true;
+ description
+ "file name stored in o-ran/beamforming folder is indicated";
+ }
+
+ uses cap-group;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the beamforming weight/attribute file";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the beamforming weight/attribute file. The O-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.";
+ }
+ }
+ }
+
+
+ rpc modify-predefined-beam-tilt-offset {
+ if-feature BEAM-TILT;
+ description
+ "RPC to trigger the modification of the predefined beam tilt offset";
+ input {
+ uses beam-tilt-configuration;
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "O-RU has accepted the predefind beamtilt offset configuration";
+ }
+ enum REJECTED {
+ description
+ "O-RU has rejected the predefind beamtilt offset configuration.";
+ }
+ }
+ mandatory true;
+ description "Status of acceptance of pre-defined beamtilt offset configuration";
+ }
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "Detailed error message when the pre-defined beam tilt configuration
+ is rejected, e.g., used when 'run-time-tilt-offset-supported' is FALSE and the
+ NETCONF client is attempting to modify the beam tilt on a band where
+ one or more array-carriers are still ACTIVE.";
+ }
+ }
+ }
+
+
+ //notification statement
+ notification beamforming-information-update {
+ uses band-num;
+ description
+ "this notification indicates that the beamforming properties are updated for particular band";
+ }
+
+ notification capability-group-beamforming-information-update {
+ uses cap-group;
+ description
+ "this notification indicates that the beamforming properties are updated for particular band
+ or capability group";
+ }
+
+ notification predefined-beam-tilt-offset-complete {
+ if-feature BEAM-TILT;
+ uses beam-tilt-report;
+ description
+ "this notification indicates that the re-generation of the predefined
+ beams is completed";
+ }
+}
--- /dev/null
+module o-ran-certificates {
+ yang-version 1.1;
+ namespace "urn:o-ran:certificates:1.0";
+ prefix "o-ran-cert";
+
+ import ietf-x509-cert-to-name {
+ prefix x509c2n;
+ reference
+ "RFC 7407: A YANG Data Model for SNMP Configuration";
+ }
+
+ import ietf-truststore {
+ prefix ietf-ts;
+ }
+
+ import ietf-keystore {
+ prefix ietf-ks;
+ }
+
+ import ietf-system {
+ prefix ietf-sys;
+ }
+
+ import ieee802-dot1x {
+ prefix dot1x;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the certificates model for the O-RAN Equipment authorization.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) augmentation of dot1x:pae-system to configure PAE credential.
+ 2) add certificate lifecycle management";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ grouping cert-maps {
+ uses x509c2n:cert-to-name;
+ description
+ "The cert-maps container is used by a TLS-
+ based NETCONF server to map the NETCONF
+ client's presented X.509 certificate to
+ a NETCONF username. If no matching and
+ valid cert-to-name list entry can be found,
+ then the NETCONF server MUST close the
+ connection, and MUST NOT accept NETCONF
+ messages over it.
+ Note - when included, the /cert-to-name/name refers to the schema node
+ users/user/name in o-ran-usermgmt.yang";
+ reference
+ "RFC 7407: NETCONF over TLS, Section 7";
+ }
+
+ grouping cert-exp-policy {
+ description "Configuration related to policies to be applied for certficate expiry";
+ leaf cert-lcm-policy {
+ type enumeration {
+ enum REISSUE_ON_DEMAND {
+ description
+ "When this policy is set, the O-RU shall:
+ a. Generate a public/private key pair whenever the
+ O-RU controller invokes <generate-csr> action statement on
+ the asymmetric-keys. The key length and algorithm
+ to be used are derived from SubjectPublicKeyInfo in
+ the csr-info field of the <generate-csr> action.
+ b. Initiate certificate signing request towards
+ the CA/RA server using CMPv2 whenever the O-RU controller
+ invokes the <generate-csr> action statement on
+ the asymmetric-keys, and get a reissued certificate";
+ }
+ }
+ description
+ "Configuration for the policy to be applied
+ for certificate lifecycle management";
+ }
+ }
+ grouping certificate-lcm-group-notif {
+ description "Grouping for parameters notified in certificate-lcm notification";
+ leaf certificate-name {
+ type leafref {
+ path "/ietf-ks:keystore/ietf-ks:asymmetric-keys/ietf-ks:asymmetric-key/ietf-ks:certificates/ietf-ks:certificate/ietf-ks:name";
+ }
+ description
+ "Reference to certificate that was re-issued. This should correspond to the certReqId provided in the CMPv2 IR/CR message.";
+ }
+ leaf cmpv2-procedure {
+ type enumeration {
+ enum INITIALIZATION_REQUEST {
+ description
+ "An Intitialization Request/Initialization Response procedure";
+ }
+ enum CERTIFICATION_REQUEST {
+ description
+ "A successful Certificate Request/Certificate Response procedure. If certification procedure (cp)
+ completes successfully during polling also, this cmpv2-procedure shall be included in the notification.";
+ }
+ enum POLLING_REQUEST {
+ description
+ "A Polling Request/Polling Response procedure. This procedure shall be included in the notification
+ only if the polling request is responded with a polling reponse having a PKIStatus of 3 (waiting)";
+ }
+ }
+ mandatory true;
+ description
+ "Identifies the CMPv2 procedure that has been completed";
+ }
+ leaf pki-status {
+ type uint8;
+ mandatory true;
+ description "The value of the PKIStatus from the CMPv2 response";
+ }
+ leaf-list pki-failure-info {
+ when "../pki-status = '2'";
+ type uint8 {
+ range "0..26";
+ }
+ description
+ "The failure case information derived from the PKIFailureInfo
+ from the CMPv2 response, where the uint8 value corresponds to
+ the bit position in PKIFailureInfo, i.e., a value of '0' encodes
+ badAlg and a value of '1' encodes badMessageCheck.";
+ }
+ leaf pki-free-text {
+ type string;
+ description "The text information returned by the CA/RA server";
+ }
+ }
+
+ container certificate-parameters {
+ description
+ "Top Level Container for all certificate related parameters";
+
+ container cert-maps {
+ description
+ "Container for certificate maps";
+
+ uses cert-maps;
+ }
+
+ container cert-expiry-policy {
+ description
+ "Container for configuration the certificate expiry policy";
+ uses cert-exp-policy;
+ }
+
+ container advance-cert-expiry-alarms-config {
+ description
+ "Container for configuration of advance alarms
+ for certificate expiry";
+
+ leaf minor-alarm-advance-time {
+ type uint16;
+ units days;
+ default 30;
+ description
+ "Number of days in advance, a minor alarm for certificate
+ about to expire needs to be raised";
+ }
+ leaf major-alarm-advance-time {
+ type uint16;
+ units days;
+ default 10;
+ description
+ "Number of days in advance, a major alarm for certificate
+ about to expire needs to be raised";
+ }
+ leaf critical-alarm-advance-time {
+ type uint16;
+ units days;
+ default 2;
+ description
+ "Number of days in advance, a critical alarm for certificate
+ about to expire needs to be raised";
+ }
+ }
+ }
+
+ notification certificate-lcm {
+ description
+ "Notification sent on successful CMPv2 procedure";
+ uses certificate-lcm-group-notif;
+ }
+
+ augment "/ietf-sys:system/dot1x:pae-system" {
+ if-feature "ietf-ts:certificates";
+ description
+ "Augment 802.1X PAE System with EAP-TLS credential information.";
+
+ container credential {
+ description
+ "Contain the credential configuration to be used with the PAE.";
+
+ leaf ca-root {
+ type leafref {
+ path "/ietf-ts:truststore/ietf-ts:certificate-bags/ietf-ts:certificate-bag/ietf-ts:name";
+ }
+ description
+ "The name of the trust anchor to be used in the EAP-TLS exchange.";
+ }
+ leaf client-cert {
+ type leafref {
+ path "/ietf-ks:keystore/ietf-ks:asymmetric-keys/ietf-ks:asymmetric-key/ietf-ks:certificates/ietf-ks:certificate/ietf-ks:name";
+ }
+ description
+ "The name of the client certificate to be used in the EAP-TLS exchange.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-common-identity-refs {
+ yang-version 1.1;
+ namespace "urn:o-ran:wg1identityref:1.0";
+ prefix "o-ran-iref";
+
+ import iana-hardware {
+ prefix ianahw;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines a set of re-usable identity references, that can be
+ re-used across O-RAN working groups.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.1.0
+
+ 1) style guide corrections";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2020-11-01" {
+ description
+ "version 1.0.0
+
+ 1) initial verstion.";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ // O-RAN functional identity types
+
+ identity o-ran-function-base {
+ description
+ "Base identity from which all O-RAN defined functions are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-ru-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to an O-RAN O-RU Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-du-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to all O-RAN O-DU Functions.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-function {
+ base "o-ran-function-base";
+ description
+ "an identity corresponding to all O-RAN O-CU Functions.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-up-function {
+ base "o-cu-function";
+ description
+ "an identity corresponding to an O-RAN O-CU UP Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-cu-cp-function {
+ base "o-cu-function";
+ description
+ "an identity corresponding to an O-RAN O-CU CP Function.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN radio technology identity types
+
+ identity o-ran-radio-technology-base {
+ description
+ "Base identity for O-RAN defined radio technology types.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity new-radio-technology {
+ base "o-ran-radio-technology-base";
+ description
+ "An identity corresponding to new radio technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity lte-technology {
+ base "o-ran-radio-technology-base";
+ description
+ "An identity corresponding to lte technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity nb-iot {
+ base "lte-technology";
+ description
+ "An identity corresponding to nb-iot technology.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN Transport technology identity types
+
+ identity o-ran-transport-technology-base {
+ description
+ "Base identity from which all O-RAN defined transport technology identities are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // O-RAN Fronthaul transport identity types
+
+ identity o-ran-fronthaul-transport-base {
+ description
+ "Base identity from which all O-RAN defined fronthaul transports are derived.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity ethernet-fronthaul-transport {
+ base "o-ran-fronthaul-transport-base";
+ description
+ "an identity corresponding to fronthaul transport using ethernet based flows.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ // Hardware component identity types
+
+ identity o-ran-module {
+ base ianahw:module;
+ description
+ "Any O-RAN module that represents a self-contained sub-system.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity o-ran-hardware-class {
+ base ianahw:hardware-class;
+ description
+ "This identity corresponding to a generic O-RAN hardware class.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+ identity fpga {
+ base o-ran-hardware-class;
+ description
+ "Represent an FPGA.
+
+ This identity is abstract and MUST NOT be used as a value.";
+ }
+
+}
--- /dev/null
+module o-ran-common-yang-types {
+ yang-version 1.1;
+ namespace "urn:o-ran:common-yang-types:1.0";
+ prefix "o-ran-types";
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ organization "O-RAN Alliance";
+
+
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines ORAN common YANG types.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 2.0.0
+
+ 1) New availability status typedef";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 1.1.0
+
+ 1) style guide corrections";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ revision "2020-10-10" {
+ description
+ "version 1.0.0
+
+ 1) Initial creation";
+
+ reference "ORAN-WG1.IM.0-v01.00";
+ }
+
+ typedef version {
+ type string {
+ pattern '[0-9]+(\.[0-9]+){1,2}';
+ }
+ description
+ "Definition used to represent a version of an interface.";
+ }
+
+ typedef timezone-name {
+ type string;
+ description
+ "A time zone name as used by the Time Zone Database,
+ sometimes referred to as the 'Olson Database'.
+
+ The complete set of valid values is defined in
+ https://www.iana.org/time-zones.
+
+ The exact set of supported values is an
+ implementation-specific matter.";
+
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database
+ IANA Time Zone Database https://www.iana.org/time-zones ";
+ }
+
+ typedef protocol {
+ type enumeration {
+ enum ECPRI {
+ description
+ "Indicates that an O-RU supports the ecpri header format
+ for the C/U plane";
+ }
+ enum IEEE-1914-3 {
+ description
+ "Indicates that an O-RU supports the 1914.3 header format
+ for the C/U plane";
+ }
+ }
+ description "the type of C/U plane protocol";
+ }
+
+ typedef duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+
+ typedef 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";
+ }
+ }
+ description "the active status of a carrier";
+ }
+
+ typedef state {
+ type enumeration {
+ enum DISABLED {
+ description
+ "Array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "Array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "Array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ description "the state on an array carrier";
+ }
+
+ typedef transport-session {
+ type enumeration {
+ enum ETHERNET {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDP_IP {
+// if-feature o-ran-int:UDPIP-BASED-CU-PLANE; How to handle enum value constrained by feature defined in o-ran-interface.yang?
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIAS_MAC{
+// if-feature o-ran-int:ALIASMAC-BASED-CU-PLANE; How to handle enum value constrained by feature defined in o-ran-interface.yang?
+ description "Alias MAC address based CUS Transport ";
+ }
+ enum SHARED_CELL {
+// if-feature o-ran-elements:SHARED_CELL; How to handle enum value constrained by feature defined in o-ran-processing-element.yang?
+ description "VLAN based CUS Transport used for Shared Cell scenario";
+ }
+ }
+ description "the transport session type";
+ }
+
+ typedef netconf-client-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A NETCONF client identifier";
+ }
+
+ typedef ca-ra-server-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A CA/RA Server identifier";
+ }
+
+ typedef segw-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A SeGW identifier";
+ }
+
+ 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";
+ }
+
+ typedef vlan-id {
+ 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 geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ typedef prach-preamble-format {
+ type enumeration {
+ enum LTE-0 {
+ description
+ "LTE PRACH Preamble format 0";
+ }
+ enum LTE-1 {
+ description
+ "LTE PRACH Preamble format 1";
+ }
+ enum LTE-2 {
+ description
+ "LTE PRACH Preamble format 2";
+ }
+ enum LTE-3 {
+ description
+ "LTE PRACH Preamble format 3";
+ }
+ enum LTE-4 {
+ description
+ "LTE PRACH Preamble format 4";
+ }
+ enum LTE-NB0 {
+ description
+ "LTE Narrowband PRACH format 0";
+ }
+ enum LTE-NB1 {
+ description
+ "LTE Narrowband PRACH format 1";
+ }
+ enum NR-0 {
+ description
+ "5GNR PRACH Preamble format 0";
+ }
+ enum NR-1 {
+ description
+ "5GNR PRACH Preamble format 1";
+ }
+ enum NR-2 {
+ description
+ "5GNR PRACH Preamble format 2";
+ }
+ enum NR-3 {
+ description
+ "5GNR PRACH Preamble format 3";
+ }
+ enum NR-A1 {
+ description
+ "5GNR PRACH Preamble format A1";
+ }
+ enum NR-A2 {
+ description
+ "5GNR PRACH Preamble format A2";
+ }
+ enum NR-A3 {
+ description
+ "5GNR PRACH Preamble format A3";
+ }
+ enum NR-B1 {
+ description
+ "5GNR PRACH Preamble format B1";
+ }
+ enum NR-B2 {
+ description
+ "5GNR PRACH Preamble format B2";
+ }
+ enum NR-B3 {
+ description
+ "5GNR PRACH Preamble format B3";
+ }
+ enum NR-B4 {
+ description
+ "5GNR PRACH Preamble format B4";
+ }
+ enum NR-C0 {
+ description
+ "5GNR PRACH Preamble format C0";
+ }
+ enum NR-C2 {
+ description
+ "5GNR PRACH Preamble format C2";
+ }
+ enum LTE-NB0-a {
+ description
+ "LTE Narrowband PRACH format 0-a";
+ }
+ enum LTE-NB1-a {
+ description
+ "LTE Narrowband PRACH format 1-a";
+ }
+ enum LTE-NB2 {
+ description
+ "LTE Narrowband PRACH format 2";
+ }
+ }
+
+ description
+ "PRACH preamble format definition";
+ }
+
+ typedef polarisation_type {
+ type enumeration {
+ enum MINUS_45 {
+ description "MINUS_45";
+ }
+ enum ZERO {
+ description "ZERO";
+ }
+ enum PLUS_45 {
+ description "PLUS_45";
+ }
+ enum PLUS_90 {
+ description "PLUS_90";
+ }
+ }
+ description "Type definition for polarisations";
+ }
+
+ typedef 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";
+ }
+
+ typedef scs-config-type {
+ 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_3_75 {
+ value 13;
+ description
+ "3.75kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ enum KHZ_7_5 {
+ value 15;
+ description
+ "7.5kHz sub carrier spacing";
+ }
+ }
+
+ description
+ "Scs configuration type definition";
+ }
+
+ typedef availability-status {
+ type union {
+ type empty;
+ type enumeration {
+ enum FAILED {
+ description
+ "The resource has an internal fault that prevents it from operating.
+ The operational state is disabled.";
+ }
+ enum DEPENDENCY {
+ description
+ "The resource cannot operate because some other resource on which it
+ depends is unavailable. The operational state is disabled.";
+ }
+ }
+ }
+ description
+ "When the value of this attribute is empty set, this implies that none of
+ the status conditions described in the enumerations are present. Only current relevant status for M-plane defined are listed here";
+ reference "CCITT Rec. X.731 (1992 E) 8.1.2.3";
+ }
+
+}
--- /dev/null
+module o-ran-compression-factors {
+ yang-version 1.1;
+ namespace "urn:o-ran:compression-factors:1.0";
+ prefix "o-ran-compression-factors";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit U-Plane configuration.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) Clarify handling of deprecated leaf compression-format.
+ 2) Add in SINR compression details";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) New compression methods BFP-SRES-MASK-IN-SEC-HEADER and MOD-SRES-MASK-IN-SEC-HEADER.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Configuration for Beamforming weights were added together with changes
+ and updates to compressions.
+ 3) add new beamspace compression enumeration for BEAMSPACE_TYPEII.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 4.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) supporting compression types per endpoint
+ 2) adding feature for configurable fs-offset for compression";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) adding selective RE sending compression types";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) changes related to compression bit-width presentation";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature CONFIGURABLE-FS-OFFSET {
+ description
+ "Presence of this feature means that O-RU supports configurable fs-offset for compression.";
+ }
+
+ typedef ci-compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+
+ 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";
+ }
+ }
+ description
+ "Available compression methods for channel information (e.g., ST6).";
+ }
+
+ typedef compression-type-def {
+ type enumeration {
+ enum STATIC {
+ description
+ "Indicates that static compression method will be used (both compression and IQ bitwidth)";
+ }
+ enum DYNAMIC {
+ description
+ "Indicates that dynamic compression method will be used";
+ }
+ }
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ typedef bf-compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+ 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 VOID_1 {
+ description
+ "Leftover of modulation, not to be used for beamforming weights";
+ }
+
+ enum VOID_2 {
+ description
+ "Leftover of block-floating-point-selective-re-sending, not to be used for beamforming weights";
+ }
+
+ enum VOID_3 {
+ description
+ "Leftover of modulation-compression-selective-re-sending, not to be used for beamforming weights";
+ }
+
+ enum BEAMSPACE_TYPEII {
+ description
+ "Beamspace compression typeII and decompression will be used ";
+ }
+ }
+ description
+ "Available compression methods for beamforming weights.";
+ }
+
+ typedef compression-method-def {
+ type enumeration {
+ enum NO_COMPRESSION {
+ description
+ "No compression";
+ }
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression method";
+ }
+
+ enum BLOCK_SCALING {
+ description
+ "Block scaling compression and decompresion method";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompresion method";
+ }
+
+ enum VOID_1 {
+ description
+ "Leftover of beamspace, not to be used for IQ data.";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression method";
+ }
+
+ enum BLOCK-FLOATING-POINT-SELECTIVE-RE-SENDING {
+ description
+ "block floating point with selective re sending
+ compression and decompression method";
+ }
+
+ enum MODULATION-COMPRESSION-SELECTIVE-RE-SENDING {
+ description
+ "modulation compression with selective re sending
+ compression and decompression method";
+ }
+ enum BFP-SRES-MASK-IN-SEC-HEADER {
+ description
+ "block floating point with selective re sending
+ compression and decompression method with selective re sending mask in the section header ";
+ }
+
+ enum MOD-SRES-MASK-IN-SEC-HEADER {
+ description
+ "modulation compression with selective re sending
+ compression and decompression method with selective re sending mask in the section header";
+ }
+ }
+ description
+ "Available compression methods for the data.";
+ }
+
+ typedef sinr-compression-method-def {
+ type enumeration {
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression will be used";
+ }
+
+ enum NO_COMPRESSION {
+ description
+ "No compression will be used";
+ }
+ }
+ description
+ "Available compression methods for the SINR.";
+ }
+
+ grouping compression-method-grouping {
+ description
+ "Grouping for compression method.";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bit-width to be used in compression";
+ }
+
+ leaf compression-method {
+ type compression-method-def;
+ description
+ "Compression method which can be supported by the O-RU";
+ }
+ }
+
+ grouping compression-details {
+ description "";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bitwidth to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ leaf compression-method {
+ type compression-method-def;
+ description
+ "Compression method which can be supported by the O-RU";
+ }
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping bf-compression-details {
+ description "Compression formats defined for beamforming";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bitwidth to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ leaf compression-method {
+ type bf-compression-method-def;
+ description
+ "Compression method which can be supported by the beamforming";
+ }
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping sinr-compression-details {
+ description "Compression formats defined for SINR";
+
+ leaf sinr-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf sinr-compression-method {
+ type sinr-compression-method-def;
+ description
+ "Compression method which can be supported by the SINR.";
+ }
+
+ leaf sinr-block-size {
+ type uint8;
+ description
+ "Block size used for reporting SINR.
+ If the parameter is absent, then the SINR values are sent without zero-padding
+ i.e., the block size is equal to the number of SINR values
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ }
+ }
+
+// *********** Deprecated ***********
+
+ grouping compression-formats {
+ status deprecated;
+ description
+ "Grouping deicated to list compression formats as choice.";
+
+ uses compresion-format-grp {
+ status deprecated;
+ }
+ }
+
+ grouping compresion-format-grp {
+ status deprecated;
+ description
+ "Grouping to for compression format choice";
+
+ choice compression-format {
+ status deprecated;
+ description
+ "Choice of compression format for particular element.
+ Note: This method is deprecated. All should be done as emumeration as details are configured
+ by udCompHdr in CU-Plane messaging.
+ NOTE: Changing the configuration from any compression format to no compression would require
+ a delete-config followed by an edit-config";
+
+ case no-compresison {
+ description "Compression for beam weights is not supported.";
+ }
+
+ case block-floating-point {
+ description "Block floating-point compression and decompression is supported.";
+
+ leaf exponent {
+ type uint8 {
+ range "4";
+ }
+ description "Exponent bit width size in number of bits used when encoding in udCompParam.";
+ }
+ }
+
+ case block-floating-point-selective-re-sending {
+ description
+ "Block floating-point with selective re sending compression and decompression is supported.";
+
+ leaf sres-exponent {
+ type uint8 {
+ range "4";
+ }
+ description "Exponent bit width size in number of bits used when encoding in udCompParam.";
+ }
+ }
+
+ case block-scaling {
+ description "Block scaling compression and decompression is supported.";
+ leaf block-scalar {
+ type uint8;
+ description
+ "Common scaler for compressed PRB";
+ }
+ }
+
+ case u-law {
+ description "u-Law compression and decompression method is supported.";
+ leaf comp-bit-width {
+ type uint8 {
+ range "0..15";
+ }
+ description "Bit with for u-law compression";
+ }
+ leaf comp-shift {
+ type uint8 {
+ range "0..15";
+ }
+ description
+ "the shift applied to the entire PRB";
+ }
+ }
+
+ case beam-space-compression {
+ description "Beamspace compression and decompression is supported. Applies to beamforming weights only.";
+ leaf-list active-beam-space-coeficient-mask {
+ type uint8;
+ description
+ "active beamspace coefficient indices associated with the compressed beamforming vector";
+ }
+ leaf block-scaler {
+ type uint8;
+ description
+ "Common scaler for compressed beamforming coefficients";
+ }
+ }
+
+ case modulation-compression {
+ description "Modulation compression and decompression is supported.";
+ leaf csf {
+ type uint8 {
+ range "0..1";
+ }
+ description "Constellation shift flag";
+ }
+
+ leaf mod-comp-scaler {
+ type uint16 {
+ range "0..32767";
+ }
+ description "Modulation compression scaler value.";
+ }
+ }
+
+ case modulation-compression-selective-re-sending {
+ description "Modulation compression with selective re sending and decompression is supported.";
+ leaf sres-csf {
+ type uint8 {
+ range "0..1";
+ }
+ description "Constellation shift flag";
+ }
+
+ leaf sres-mod-comp-scaler {
+ type uint16 {
+ range "0..32767";
+ }
+ description "Modulation compression scaler value.";
+ }
+ }
+
+ }
+ }
+
+ grouping compression-params {
+ status deprecated;
+ description
+ "Parameters to define compression";
+
+ leaf compression-type {
+ type compression-type-def;
+ mandatory true;
+ description
+ "Compression type that O-DU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "../compression-type = 'STATIC'";
+ type uint8;
+ status deprecated;
+ description
+ "Bit-width to be used in compression.
+ This has since been replaced in M-Plane version
+ 2.0.0 with the iq-bitwidth schema node";
+ }
+
+ uses compression-formats {
+ status deprecated;
+ }
+ }
+
+ grouping compression-parameters {
+ status deprecated;
+ description
+ "Parameters used to define description type";
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bit-width to be used in compression";
+ }
+
+ uses compression-formats {
+ status deprecated;
+ }
+ }
+
+ grouping format-of-iq-sample {
+ status deprecated;
+ description
+ "Indicates module capabilities about IQ samples";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if radio supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if O-RU supports real-time variable bit with";
+ }
+
+ list compression-method-supported {
+ status deprecated;
+ uses compression-parameters {
+ status deprecated;
+ }
+
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer do endpoints to have information what
+ exactly is supported on a particular endpoint";
+ }
+
+ leaf syminc-supported {
+ type boolean;
+
+ description
+ "Informs if symbol number increment command in a C-Plane is
+ supported or not";
+ }
+
+ leaf regularization-factor-se-supported {
+ type boolean;
+
+ description
+ "Informs if regularizationFactor in section type 5 is
+ supported(true) or not(false)";
+ }
+
+ leaf little-endian-supported {
+ type boolean;
+ default false;
+
+ description
+ "All O-RUs support bigendian byte order. This node informs if module supports the
+ the optional capability for little endian byte order for C/U plane data flows.
+
+ Note - little endian support does not invalidate bigendian support.";
+ }
+ }
+
+// *********** Deprecated End ***********
+
+}
--- /dev/null
+module o-ran-delay-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:delay:1.0";
+ prefix "o-ran-delay";
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module covers off aspects of O-DU to O-RU delay management,
+ including configuration data related to O-RU transmission and reception
+ windows.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) Removing the range to align bandwidth type to same bandwidth type as
+ in uplane-config module and module-cap modules.
+ 2) Add in Ta3-2g data processing delay";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for for beamforming list and delay profiles(s) per endpoint.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introducing new feature for ACK NACK feedback.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add new schema node beam-context-gap-period.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) introduction of new t1a-max-cp-dl leaf to enable decoupled timing between C- and U-Plane";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) fixing descriptions of ta3-min and ta3-max.
+ 2) introducing grouping/uses to enable model re-use by WG5";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature ADAPTIVE-RU-PROFILE {
+ description
+ "This feature indicates that the O-RU supports adaptive O-RU delay profile
+ based on information provided by the NETCONF client.";
+ }
+
+ typedef bandwidth {
+ type uint32;
+ units kilohertz;
+ description
+ "transmission bandwidth configuration in units of kHz -
+ covering NB-IoT through to New Radio.
+ Value shall correspond to a value defined in 38.104.";
+ }
+
+ grouping bandwidth-configuration {
+ description
+ "Grouping for bandwidth and SCS configuration";
+
+ leaf bandwidth {
+ type bandwidth;
+ 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 "sub-carrier spacing in Hz";
+ }
+ }
+
+ grouping t2a-up {
+ description
+ "configuration of t2a for uplink";
+
+ leaf t2a-min-up {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-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";
+ }
+ }
+
+ grouping t2a-cp-dl {
+ description
+ "Grouping for t2a CP for downlink";
+
+ leaf t2a-min-cp-dl {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-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";
+ }
+ }
+
+ grouping ta3 {
+ description
+ "Grouping for ta3 configuration";
+
+ leaf ta3-min {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the first data sample over the
+ fronthaul interface";
+ }
+ leaf ta3-max {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the last data sample over the
+ fronthaul interface";
+ }
+ }
+
+ grouping t2a-cp-ul {
+ description
+ "Grouping for t2a CP uplink";
+
+ leaf t2a-min-cp-ul {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum O-RU data processing delay between receiving real time
+ up-link control plane message over the fronthaul interface and
+ receiving 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";
+ }
+ }
+
+ grouping ta3-ack {
+ description
+ "Grouping for ta3-ack configuration";
+ leaf ta3-min-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the minimum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+
+ leaf ta3-max-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the maximum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+ }
+
+ grouping ta3-2g {
+ description
+ "Grouping for ta3-2g configuration";
+
+ leaf ta3-min-2g {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint32;
+ units nanoseconds;
+ description
+ "The minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting a C-Plane message carrying RRM measurements
+ over the fronthaul interface.
+
+ Please refer to CUS specification clause 4.4.3 for more details.";
+ }
+ leaf ta3-max-2g {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting a C-Plane message carrying RRM measurements
+ over the fronthaul interface.
+
+ Please refer to CUS specification clause 4.4.3 for more details.";
+ }
+ }
+
+ grouping ru-delay-profile {
+ description
+ "Grouping for RU delay profile";
+
+ uses t2a-up;
+ uses t2a-cp-dl;
+
+ leaf tcp-adv-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.";
+ }
+
+ uses ta3;
+ uses t2a-cp-ul;
+ uses ta3-ack;
+ uses ta3-2g;
+ }
+
+ grouping o-du-delay-profile {
+ description
+ "Grouping for O-DU delay profile";
+
+ leaf t1a-max-up {
+ type uint32;
+ units nanoseconds;
+ description
+ "the earliest possible time which the O-DU can support transmitting
+ an IQ data message prior to transmission of the corresponding IQ
+ samples at the antenna";
+ }
+ leaf tx-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum amount of time which the O-DU requires to transmit
+ all downlink user plane IQ data message for a symbol";
+ }
+ leaf ta4-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the latest possible time which the O-DU can support receiving the
+ last uplink user plane IQ data message for a symbol.";
+ }
+ leaf rx-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum time difference the O-DU 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";
+ }
+ leaf t1a-max-cp-dl {
+ type uint32;
+ units nanoseconds;
+ description
+ "The earliest possible time which the O-DU can support transmitting the
+ downlink real time control message prior to transmission of the
+ corresponding IQ samples at the antenna.";
+ }
+ }
+
+ grouping t12 {
+ description
+ "Grouping for t12";
+
+ leaf t12-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between DU port-ID and O-RU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t12-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between CU port-ID and O-RU port-ID";
+ }
+ }
+
+ grouping t34 {
+ description
+ "Grouping for t34";
+
+ leaf t34-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between O-RU port-ID and CU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t34-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between O-RU port-ID and CU port-ID";
+ }
+ }
+
+ grouping non-default-ru-delay-profile {
+ description
+ "Grouping for O-RU delay profile different from the default value in ru-delay-profile.";
+ leaf t2a-min-up {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum O-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;
+ 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;
+ description
+ "the minimum O-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;
+ 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 tcp-adv-dl {
+ type uint32;
+ units nanoseconds;
+ 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;
+ description
+ "the minimum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the first data sample over the
+ fronthaul interface";
+ }
+ leaf ta3-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum O-RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the last data sample over the
+ fronthaul interface";
+ }
+ leaf t2a-min-cp-ul {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum O-RU data processing delay between receiving real time
+ up-link control plane message over the fronthaul interface and
+ receiving the first IQ sample at the antenna";
+ }
+ leaf t2a-max-cp-ul {
+ type uint32;
+ units nanoseconds;
+ 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";
+ }
+ leaf ta3-min-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the minimum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+ leaf ta3-max-ack {
+ type int32;
+ units nanoseconds;
+ description
+ "the maximum delay between the DL/UL air reference point (tDL=0 or tUL=0) of symbol M
+ and the time O-RU sends section type 8 (ACK/NACK feedback) to O-DU.
+ This value can be negative, which indicates it is in advance of the air reference point.
+ This leaf only exists if section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback)
+ are supported by at least one endpoint.";
+ }
+
+ uses ta3-2g;
+ }
+
+ grouping delay-management-group {
+ description "a delay management grouping";
+ list bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+
+ uses bandwidth-configuration;
+
+ container ru-delay-profile {
+ config false;
+ description "container for O-RU delay parameters";
+
+ uses ru-delay-profile;
+ }
+ }
+
+ list non-default-ru-delay-profile {
+ if-feature feat:BF-DELAY-PROFILE;
+ key "delay-profile-id";
+ description
+ "Sets of parameters defined when o-ru supported multiple delay profiles,
+ only the parameters that are different from the default delay profile are defined.";
+ leaf delay-profile-id {
+ type uint16 {
+ range "1..max";
+ }
+ description
+ "Used to identify the set of delay profile that are different from the default delay profile.
+ Value '0' is reserved to refer to default value";
+ }
+ list non-default-bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+ uses bandwidth-configuration;
+ container non-default-ru-delay-profile {
+ config false;
+ description
+ "O-RU delay parameters that are different from the default delay profile.
+ If a parameter doesn't exist, this parameter will use the defalt value determined in ru-delay-profile.";
+ uses non-default-ru-delay-profile;
+ }
+ }
+ }
+
+ 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.";
+
+ uses bandwidth-configuration;
+
+ container o-du-delay-profile {
+ description
+ "O-DU provided delay profile for adaptive delay configuration";
+
+ uses o-du-delay-profile;
+ }
+ }
+
+ container transport-delay {
+ description
+ "O-DU provided transport-delay parameters";
+ uses t12;
+ uses t34;
+ }
+ }
+
+ leaf beam-context-gap-period {
+ type uint16;
+ units microseconds;
+ description
+ "Time gap between the end of reception window of the C-Plane message(Msg-A) with new beam weights for a given beamId and end of the reception window
+ of the C-Plane message(Msg-B) that cites the same beamId without weights in the new context.
+ Note: Value of '0' indicates that the end of the Msg-A and Msg-B reception windows are perfectly aligned, which should allow Msg-B to use the new
+ beamforming weights with a '0' microsecond beam-context-gap-period. Value of '65535' implies infinite gap, which means a beamId may not be reused
+ at all in a different context (applicable only to weight-based dynamic beamforming). If O-DU chooses not to interpret/honor this value, behaviour
+ of O-RU is unpredictable if a beamId has new weights loaded in one context and is reused in a different context. Please refer the CUS-Plane spec
+ Section 'Weight-based dynamic beamforming' for detailed description";
+ }
+ }
+ container delay-management {
+ description "top-level tree covering off O-DU to O-RU delay management";
+
+ uses delay-management-group;
+ }
+}
--- /dev/null
+module o-ran-dhcp {
+ yang-version 1.1;
+ namespace "urn:o-ran:dhcp:1.0";
+ prefix "o-ran-dhcp";
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-dhcpv6-types {
+ prefix dhcpv6-type;
+ revision-date 2018-09-04;
+ }
+
+ import ietf-dhcpv6-common {
+ prefix dhcpv6-type2;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the DHCP client.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 10.1.0
+
+ 1) Remove mandatory statement for leaf ia-type";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added DUID/IAID support for IPv4.
+ 2) switched import FROM ietf-dhcpv6-types TO ietf-dhcpv6-common";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) Typographical corrections for british english.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added new leafs for reporting discovered event-collectors
+ used";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to fix pen number which always
+ should have been 32 bits
+ 2) backward compatible changes to introduce reporting of 3GPP
+ discovered MV-PnP information, including CA/RA Servers and SeGW
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef netconf-client-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A NETCONF client identifier";
+ }
+
+ typedef ca-ra-server-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A CA/RA Server identifier";
+ }
+
+ typedef segw-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A SeGW identifier";
+ }
+
+ typedef event-collector-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "An event collector identifier";
+ }
+
+ grouping ca-ra-servers {
+ description
+ "The CA/RA servers discovered using DHCP, discovered using the 3GPP
+ defined options in 3GPP 32.509 in vendor specific option 43/17";
+ list ca-ra-servers {
+ key servers;
+ description "A list of IP addresses or URIs for CA/RA Servers";
+
+ leaf servers{
+ type ca-ra-server-id;
+ description "the server identifier";
+ }
+ leaf port-number {
+ type inet:port-number;
+ description "an optional (non-default) port";
+ }
+ leaf ca-ra-path {
+ type string;
+ description
+ "ASCII string representing the path to the CMP server directory.
+ A CMP server may be located in an arbitrary path other than root.";
+ }
+ leaf subject-name {
+ type string;
+ description
+ "ASCII string representing the subject name of the CA/RA. ";
+ }
+ leaf protocol {
+ type enumeration {
+ enum HTTP {
+ description
+ "HTTP used to communicate with CA/RA server";
+ }
+ enum HTTPS{
+ description
+ "HTTPS used to communicate with CA/RA server";
+ }
+ }
+ description "the protocol used to communicate with a CA/RA server";
+ }
+ }
+ }
+
+ grouping security-gateways {
+ description
+ "The security gateways discovered using DHCP, discovered using the 3GPP
+ defined options in 3GPP 32.509 in vendor specific option 43/17";
+ list segw {
+ key gateways;
+ description "A list of IP addresses or URIs for SeGW";
+
+ leaf gateways{
+ type segw-id;
+ description "the SeGW identifier";
+ }
+ }
+
+ }
+
+ grouping netconf-clients {
+ description
+ "The NETCONF clients discovered using DHCP, discovered using the IANA
+ defined options or O-RAN defined syntax for encoding IP addresses or FQDNs
+ in vendor specific option 43/17";
+ 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 event-collectors {
+ description
+ "The event-collectors discovered using DHCP, discovered using the O-RAN
+ defined syntax for encoding IP addresses or FQDNs in vendor specific
+ option 43/17";
+ leaf-list event-collectors{
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type event-collector-id;
+ max-elements 1;
+ description
+ "An event-collector discovered using DHCP that can be used by the O-RU to
+ send pnfRegistration notification messages.
+
+ The O-RU behaviour when discovering more than one event-collector is not defined.";
+ }
+ leaf event-collector-format{
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type enumeration {
+ enum ONAP {
+ description "ONAP format is used to signal the event-collector";
+ }
+ }
+ description "the event-collector notification format";
+ }
+ }
+
+ 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 O-RUs subnet";
+ }
+ uses netconf-clients;
+ uses ca-ra-servers;
+ uses security-gateways;
+ uses event-collectors;
+ }
+
+ grouping dhcpv6-option {
+ description "DHCPv6 Configuration options";
+
+ container dhcp-server-identifier{
+ status deprecated;
+ description "dhcpv6 server identifier - deprecated as this uses import from ietf-dhcpv6-types and not ietf-dhcpv6-common";
+ uses dhcpv6-type:duid;
+ }
+ container dhcpv6-server-identifier{
+ description "dhcpv6 server identifier - replaces container dhcp-server-identifier and uses import from ietf-dhcpv6-common";
+ uses dhcpv6-type2: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;
+ uses ca-ra-servers;
+ uses security-gateways;
+ uses event-collectors;
+ }
+
+ grouping dhcp-group {
+ description "a dhcp grouping";
+ 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 - used when the DHCPv4 client in the O-RU does not use DUID/IAID";
+ }
+ uses dhcpv6-type2:duid;
+
+ container identity-association {
+ description "an optional container - used when DHCPv4 client uses DUID/IAID as identifier";
+
+ leaf iaid {
+ type uint32;
+ description "IAID";
+ }
+ leaf ia-type {
+ type string;
+ description "IA type";
+ }
+ }
+ uses dhcpv4-option;
+ }
+ container dhcpv6 {
+ description "DHCPv6 information";
+ container dhcp-client-identifier{
+ status deprecated;
+ description "dhcpv6 client identifier - deprecated as this uses import from ietf-dhcpv6-types and not ietf-dhcpv6-common";
+ uses dhcpv6-type:duid;
+ }
+ container dhcpv6-client-identifier{
+ description "dhcpv6 client identifier using ietf-dhcpv6-common import";
+ uses dhcpv6-type2:duid;
+ container identity-association {
+ description "a container describing IAID information";
+
+ leaf iaid {
+ type uint32;
+ description "IAID";
+ }
+ leaf ia-type {
+ type string;
+ description "IA type";
+ }
+ }
+ }
+ uses dhcpv6-option;
+ }
+ }
+
+ container m-plane-dhcp {
+ description "leafs covering off DHCP aspects of m-plane operations";
+ leaf private-enterprise-number {
+ type uint16;
+ default 53148;
+ status deprecated;
+ description "the private enterprise number allocated to O-RAN Alliance";
+ }
+ leaf private-enterprise-num {
+ type uint32;
+ default 53148;
+ description "the private enterprise number allocated to O-RAN Alliance";
+ }
+ leaf vendor-class-data {
+ type string;
+ description
+ "The string used in DHCPv4 option 60 or DHCPv4 option 124 and
+ DHCPv6 option 16";
+ }
+ }
+ }
+
+
+ // Top Level Container
+
+ container dhcp {
+ config false;
+ description
+ "DHCP client configuration";
+
+ uses dhcp-group;
+ }
+}
--- /dev/null
+module o-ran-ecpri-delay {
+ yang-version 1.1;
+ namespace "urn:o-ran:message5:1.0";
+ prefix "o-ran-msg5";
+
+ import o-ran-processing-element {
+ prefix "element";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module is an optional module for supporting eCPRI message 5 handling
+ used for eCPRI based delay measurements.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 8.1.0
+
+ 1) Clarifying T12 support.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Add support for multiple transport-session-type per O-RU.";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) add support for optional reporting of one or two-step measurements";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+// groupings
+
+ grouping msg5-group {
+ description "an eCPRI message 5 grouping";
+
+ 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 O-RU";
+ }
+ leaf tcv1 {
+ type uint32;
+ units nanoseconds;
+ description
+ "a compensation value to account for expected processing time from
+ timestamping in the O-RU until actual packet transmission at R3";
+ }
+ }
+
+ leaf enable-message5 {
+ type boolean;
+ default false;
+ description
+ "whether O-RU's eCPRI message 5 handling is enabled.";
+ }
+
+ leaf one-step-t34-supported {
+ type boolean;
+ config false;
+ description
+ "Indicates whether O-RU supports eCPRI message 5 one-step procedure for
+ T34 measurements.
+ An O-RU supporting this YANG module shall at least set one of
+ one-step-t34-supported or two-step-t34-supported to true.
+
+ Note, an O-RU supporting this YANG module follows the rules of T12 support
+ as defined in O-RAN CUS-Plane, Table 10.2-1.";
+ }
+
+ leaf two-step-t34-supported {
+ type boolean;
+ config false;
+ description
+ "Indicates whether O-RU supports eCPRI message 5 two-step procedure for
+ T34 measurements.
+ An O-RU supporting this YANG module shall at least set one of
+ one-step-t34-supported or two-step-t34-supported to true
+
+ Note, an O-RU supporting this YANG module follows the rules of T12 support
+ as defined in O-RAN CUS-Plane, Table 10.2-1";
+ }
+
+ 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";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element-name'";
+ }
+
+ leaf transport-qualified-processing-element-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/element:processing-elements/element:additional-transport-session-type-elements[element:transport-session-type = current()/../transport-session-type]/element:ru-elements/element:name";
+ }
+ description
+ "the name of the processing element used for MSG5, used when the processing element
+ is configured by the list 'additional-transport-session-type-elements'";
+ }
+
+ container flow-state {
+ config false;
+ description "MSG5 flow state";
+ leaf responses-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 response messages transmitted by
+ the O-RU.";
+ }
+ leaf requests-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 request messages transmitted by
+ the O-RU.";
+ }
+ leaf followups-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI message 5 follow up messages transmitted by
+ the O-RU.";
+ }
+ }
+ }
+ }
+ }
+
+// top level container
+
+ container ecpri-delay-message {
+ description "top-level tree covering off O-DU to O-RU msg5 delay measurement";
+
+ uses msg5-group;
+ }
+}
--- /dev/null
+module o-ran-ethernet-forwarding {
+ yang-version 1.1;
+ namespace "urn:o-ran:ethernet-fwd:1.0";
+ prefix "o-ran-eft";
+
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
+ import o-ran-interfaces {
+ prefix "or-if";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the Ethernet forwarding table of an O-RU.
+ This is an option capability used when supporting 'shared cell' operation.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 3.1.0
+
+ 1. Typo corrections for british english";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1. Initial version";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ grouping ethernet-ft {
+ description
+ "Ethernet forwarding table.";
+
+ leaf aging-time {
+ type uint32 {
+ range "10..10000000";
+ }
+ units "seconds";
+ default "300";
+ description
+ "The timeout period in seconds for ageing out
+ dynamically-learned forwarding information.";
+ }
+
+ list filtering-entry {
+ key "address vlan-id";
+ config false;
+ description
+ "List of the entries within the Ethernet forwarding table.
+ This list is keyed by the MAC address and VLAN of the Ethernet frame.";
+
+ leaf address {
+ type yang:mac-address;
+ description
+ "A MAC address (unicast, multicast, broadcast) for
+ which the device has forwarding and/or filtering
+ information.";
+ }
+
+ leaf vlan-id {
+ type uint16 {
+ range "0..4094";
+ }
+ description
+ "VLAN-ID entry in the forwarding table, used during the
+ look-up when receiving an in-coming Ethernet frame to determine
+ how to forward.
+
+ A value of 0 indicates that the filtering entry is for an un-tagged
+ frame/MAC address";
+ }
+
+ list port-map {
+ key "port-ref";
+ description
+ "The list of entries composing the port map.";
+ leaf port-ref {
+ type leafref {
+ path "/if:interfaces/if:interface/or-if:port-reference/or-if:port-number";
+ }
+ description
+ "The interface port reference associated with this map.";
+ }
+ }
+ }
+ }
+
+ container ethernet-forwarding-table {
+ description "Top level container defining forwarding tables for Ethernet";
+
+ uses ethernet-ft;
+ }
+
+}
--- /dev/null
+module o-ran-externalio {
+ yang-version 1.1;
+ namespace "urn:o-ran:external-io:1.0";
+ prefix "o-ran-io";
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ external IO.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of O-RU Connectors for external IO.";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping external-io-group {
+ description "an external io grouping";
+ list input {
+ key "name";
+ config false;
+ description
+ "Leaf nodes describing external line inputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A unique name 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.";
+ }
+
+ leaf related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-EXTIO')";
+ description
+ "Referenced name of O-RU connector used by the External IO port - input lines.";
+ }
+ }
+
+ list output {
+ key "name";
+ config false;
+ description
+ "Leaf nodes describing external line outputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique 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 related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-EXTIO')";
+ description
+ "Referenced name of O-RU connector used by the External IO port - output lines.";
+ }
+ }
+
+ list output-setting {
+ key "name";
+
+ description
+ "List allowing to set output line state";
+
+ leaf name {
+ type leafref {
+ path "/external-io/output/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Name derived from unmodifiable list external-io";
+ }
+
+ 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.";
+ }
+ }
+ }
+
+ grouping notification-group {
+ description "a notification grouping";
+ 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";
+ }
+ }
+ }
+ }
+
+// Top Level Container
+
+ container external-io {
+ description
+ "External IO information.";
+ uses external-io-group;
+ }
+
+ notification external-input-change {
+ description
+ "Notification used to indicate that external line input has changed state";
+ uses notification-group;
+ }
+}
--- /dev/null
+module o-ran-fan {
+ yang-version 1.1;
+ namespace "urn:o-ran:fan:1.0";
+ prefix "o-ran-fan";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the state of the O-RAN equipment's fans.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef percent {
+ type uint16 {
+ range "0 .. 100";
+ }
+ description "Percentage";
+ }
+
+ grouping fan-grouping {
+ description "a fan grouping";
+ 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 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";
+ }
+ }
+ }
+
+ container fan-tray {
+ config false;
+ description "top-level tree covering off operational state of the fans";
+
+ uses fan-grouping;
+ }
+}
--- /dev/null
+module o-ran-file-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:file-management:1.0";
+ prefix "o-ran-file-mgmt";
+
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration and operations for handling upload.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 10.2.0
+
+ 1) Improve YANG description enforce typing of IPv6 addresses";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 10.1.0
+
+ 1) Remove crypto-types dependency";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added password for FTPES
+ 2) clarified path/folder description ";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) added FTPES support";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to correct sFTP Server Authentication .
+ 2) minor fixes according to lack of descriptions
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ /***********************************************/
+ /* Identities for Asymmetric Key Algorithms */
+ /***********************************************/
+
+ identity asymmetric-key-algorithm {
+ description
+ "Base identity from which all asymmetric key
+ encryption Algorithm.";
+ }
+
+ identity rsa1024 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 1024-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa2048 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 2048-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa3072 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 3072-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa4096 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 4096-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa7680 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 7680-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity rsa15360 {
+ base asymmetric-key-algorithm;
+ description
+ "The RSA algorithm using a 15360-bit key.";
+ reference
+ "RFC 8017:
+ PKCS #1: RSA Cryptography Specifications Version 2.2.";
+ }
+
+ identity secp192r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+ identity secp224r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp256r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp384r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ identity secp521r1 {
+ base asymmetric-key-algorithm;
+ description
+ "The ECDSA algorithm using a NIST P256 Curve.";
+ reference
+ "RFC 6090:
+ Fundamental Elliptic Curve Cryptography Algorithms.";
+ }
+
+ /**********************************************************/
+ /* Typedefs for identityrefs to above base identities */
+ /**********************************************************/
+
+ typedef asymmetric-key-algorithm-ref {
+ type identityref {
+ base asymmetric-key-algorithm;
+ }
+ description
+ "This typedef enables importing modules to easily define an
+ identityref to the 'asymmetric-key-algorithm'
+ base identity.";
+ }
+
+ grouping file-path-grouping {
+ description "Grouping, that provides local path and remote path for the
+ purpose of File Management scenarios.";
+
+
+ leaf local-logical-file-path {
+ type string;
+ mandatory true;
+ description "URI specifying the complete logical path relative to the root of the logical file system
+ structure (the common root for o-ran/log, o-ran/pm, o-ran/transceiver or o-ran/beamforming) of the file
+ to upload/download (no wildcard is allowed), including a file name and its extension.
+ Example: 'o-ran/log/file_1.abc', where 'o-ran/log/' represents relative path to folder containing log files
+ as specified by O-RAN, 'file_1' represents desired filename and 'abc' represents desired filename's extension.
+ The content shall conform to RFC3986 'Uniform Resource Identifier (URI): Generic Syntax'";
+ }
+
+ leaf remote-file-path {
+ type string;
+ mandatory true;
+ description "URI specifying the remote-file-path on O-DU/SMO or on stand-alone file server.
+ The content shall conform to RFC3986 'Uniform Resource Identifier (URI): Generic Syntax'.
+ When upload/download is via sftp, the format shall be of the form
+ sftp://<username>@<host>[:port]/path
+ When upload/download is via ftpes, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+ IPv6 addresses are distinguished by enclosing the IP literal within square brackets ('[' and ']') as defined by RFC3986 e.g., sftp://user@[2001:0:130F::9C0:876A:130B]:22/path.
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES";
+ }
+ }
+
+ 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 file upload or download.";
+ choice credentials {
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+ description
+ "password used for O-RU authentication to sFTP server for the associated username defined in the remote-file-path.";
+ }
+ description
+ "password for O-RU authentication method in use. This information
+ shall be ignored by an O-RU that is using FTPES based file transfer";
+ }
+ container server {
+ list keys {
+ key algorithm;
+ ordered-by user;
+ uses public-key-grouping;
+ description
+ "List of allowed algorithms with its keys";
+ }
+ description
+ "SSH Key for file server authentication";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+
+ }
+ description "";
+ }
+ container application-layer-credential{
+
+ leaf appl-password {
+ type string;
+ description
+ "The parameter represents the password which may be needed for O-RU application level authentication.
+ For example, to perform authenticatation towards an FTPes server which does not allow anonymous account,
+ in addition to X.509v3 certificate for TLS authentication, password configured here need to be used together with username defined in the remote-file-path ";
+ }
+ description
+ "Application layer credential information";
+ }
+ }
+
+ grouping retrieve-input {
+ description "Grouping for information retrieval RPC input";
+ leaf logical-path {
+ type string;
+ mandatory true;
+ description "URL specifying the logical path relative to the root of the logical file system
+ structure (the common root for o-ran/log, o-ran/pm, o-ran/transceiver or o-ran/beamforming)
+ of the files to be listed.";
+ }
+ leaf file-name-filter {
+ type string;
+ description "Filter which needs to be applied on the result list of file names (* is allowed as wild-card).";
+ }
+ }
+
+ grouping retrieve-output {
+ description "Grouping for information retrieval RPC output";
+ uses output-status-grouping;
+ leaf-list file-list {
+ when "../status = 'SUCCESS'";
+ type string;
+ description "List of files in the unit with the filter applied.";
+ }
+ }
+
+ grouping public-key-grouping {
+ description
+ "A public key.
+
+ The 'algorithm' and 'public-key' nodes are not
+ mandatory because they MAY be defined in <operational>.
+ Implementations SHOULD assert that these values are
+ either configured or that they exist in <operational>.";
+ leaf algorithm {
+ nacm:default-deny-write;
+ type asymmetric-key-algorithm-ref;
+ must '../public-key';
+ description
+ "Identifies the key's algorithm. More specifically,
+ this leaf specifies how the 'public-key' binary leaf
+ is encoded.";
+ reference
+ "RFC CCCC: Common YANG Data Types for Cryptography";
+ }
+ leaf public-key {
+ nacm:default-deny-write;
+ type binary;
+ must '../algorithm';
+ description
+ "A binary that contains the value of the public key. The
+ interpretation of the content is defined by the key
+ algorithm. For example, a DSA key is an integer, an RSA
+ key is represented as RSAPublicKey as defined in
+ RFC 8017, and an Elliptic Curve Cryptography (ECC) key
+ is represented using the 'publicKey' described in
+ RFC 5915.";
+ reference
+ "RFC 8017: Public-Key Cryptography Standards (PKCS) #1:
+ RSA Cryptography Specifications Version 2.2.
+ RFC 5915: Elliptic Curve Private Key Structure.";
+ }
+ }
+
+// RPCs
+
+ rpc file-upload {
+ description "Management plane trigger to upload file from O-RU to file-server";
+ 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 O-RAN unit (* is allowed as wild-card).";
+ input {
+ uses retrieve-input;
+
+ }
+ output {
+ uses retrieve-output;
+ }
+ }
+
+ rpc file-download {
+ description
+ "Management plane trigger to download file from file-server to O-RU.";
+ input {
+ uses file-path-grouping;
+ uses credential-information;
+ }
+ output {
+ uses output-status-grouping;
+ }
+ }
+
+ notification file-upload-notification {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+
+ notification file-download-event {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+}
--- /dev/null
+module o-ran-fm {
+ yang-version 1.1;
+ namespace "urn:o-ran:fm:1.0";
+ prefix "o-ran-fm";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines alarm reporting mechanism.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 15.1.0
+
+ 1) change external alarm source info to external fault source.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new fault-name leaf.
+ 2) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) removed min-elements 1 from affected-objects list
+ 2) added identifier to affected-objects list
+ 3) added new additional-information list";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) added feature HISTORICAL-ALARM-LIST
+ 2) added corresponding historical-alarm-list container";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add new leafs probable-cause, specific-problem, proposed-repair-actions
+ and alarm-type";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature HISTORICAL-ALARM-LIST {
+ description
+ "O-RU supports Historical Alarm List to keep a historical
+ record of alarms events over M-plane.";
+ }
+
+ grouping alarm {
+ description
+ "Grouping 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.
+ If the fault source is external and can not be represented by an object in the model, external fault source info should be set as the value.
+ If the fault source can be represented by an object in the model, the YANG instance-identifier should be set as the value";
+ }
+
+ 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.";
+ }
+
+ leaf identifier {
+ type yang:xpath1.0;
+ description "An optional parameter used to indicate a YANG instance-identifier for the affected
+ object. Used when the object or source is represented in the object model.";
+ }
+
+ 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 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 probable-cause {
+ type string {
+ length "0..255";
+ }
+ description
+ "Probable cause of an alarm as defined in ITU-T Rec. X.733.
+ It qualifies alarm and provides further information than alarm-type.
+
+ The value of the probable cause strings are not standardized in this YANG model.
+
+ An O-RU shall populate this leaf, if the fault-text string does not indicate
+ the probable cause.";
+ }
+
+ leaf specific-problem {
+ type string {
+ length "0..255";
+ }
+ description
+ "An optional leaf providing further qualification on the alarm than probable-cause,
+ as defined in ITU-T Recommendation X.733 ";
+ }
+
+ leaf proposed-repair-actions {
+ type string {
+ length "0..255";
+ }
+ description
+ "Optional leaf, used if the cause is known and the O-RU can suggest one or
+ more solutions to fix the problem causing the alarm as defined in ITU-T Rec. X. 733";
+ }
+
+ leaf event-time {
+ type yang:date-and-time;
+ mandatory true;
+
+ description
+ "Timestamp to indicate the time when the fault is detected/cleared.";
+ }
+
+ list additional-information {
+ key "identifier";
+ description
+ "This parameter allows the inclusion of an additional
+ information set in the alarm. It is a series of data
+ structures, each of which contains items of
+ information: an identifier,
+ and the problem information. Refer to RFC8632.";
+ leaf identifier {
+ type string;
+ description
+ "Identifies the data type of the information parameter.";
+ }
+ leaf information {
+ type string;
+ description
+ "Additional information about the alarm.";
+ }
+ }
+
+ leaf alarm-type {
+ type enumeration {
+ enum COMMUNICATIONS-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum PROCESSING-ERROR-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum ENVIRONMENTAL-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum QUALITY-OF-SERVICE-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum EQUIPMENT-ALARM {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum INTEGRITY-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum OPERATIONAL-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum PHYSICAL-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum SECURITY-SERVICE-OR-MECHANISM-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ enum TIME-DOMAIN-VIOLATION {
+ description
+ "See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for description";
+ }
+ }
+ description
+ "An optional alarm type that can be used with vendor specific alarms.
+ See Table 12.2.1.4.4.6-1 in 3GPP 28.532 for definitions.
+
+ WG4 common O-RU alarms have pre-defined alarm types, see Annex A of
+ O-RAN.WG4.MP.O";
+ }
+
+ leaf fault-name {
+ type string {
+ length "0..255";
+ }
+
+ description
+ "Name of the fault.
+
+ The primary use case for this leaf is to provide name of a fault if the fault
+ is vendor specific.
+
+ If the leaf is provided for a fault defined in the M-Plane specification,
+ then the value of this leaf should be identical with the value defined in the
+ column 'Name' of the Table 'Common O-RU Alarms' in the Annex A of the
+ M-Plane specification.";
+ }
+ }
+
+ container active-alarm-list {
+ list active-alarms {
+ uses alarm;
+
+ description
+ "List of currently active alarms";
+ }
+ config false;
+
+ description
+ "List of currently active alarms. An alarm is removed from this table when the state transitions to clear.";
+ }
+
+ container historical-alarm-list {
+ if-feature HISTORICAL-ALARM-LIST;
+ description
+ "an optional container to notify the event subscriber of historical alarms information. When the O-RU
+ is reset, the alarm entries from historical-alarm-list will be purged. O-RU vendor can make this
+ list persistent optionally.";
+
+ list historical-alarms {
+ uses alarm;
+
+ config false;
+ description
+ "List of historical alarm events. This list only captures the alarm events when <is-cleared>=TRUE.";
+ }
+
+ }
+
+ notification alarm-notif {
+ uses alarm;
+
+ description
+ "Notification sent on initial alarm creation, as well as any time the alarm changes state, including clear";
+ }
+}
--- /dev/null
+module o-ran-frequency-band-measurement {
+ yang-version 1.1;
+ namespace "urn:o-ran:frequency-band-measurement:1.0";
+ prefix "o-ran-frequency-band-measurement";
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the measurements for operation in specific frequency-band measurement.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ typedef measurement-bandwidth {
+ type enumeration {
+ enum 1MHZ {
+ description
+ "1 MHz measurement bandwidth";
+ }
+ enum 5MHZ {
+ description
+ "5 MHz measurement bandwidth";
+ }
+ enum 10MHZ {
+ description
+ "10 MHz measurement bandwidth";
+ }
+ enum 20MHZ {
+ description
+ "20 MHz measurement bandwidth";
+ }
+ enum 50MHZ {
+ description
+ "50 MHz measurement bandwidth";
+ }
+ enum 100MHZ {
+ description
+ "100 MHz measurement bandwidth";
+ }
+ }
+ description
+ "Measurement unit bandwidths";
+ }
+
+ grouping output-status-grouping {
+ description "Status grouping";
+ leaf status {
+ type enumeration {
+ enum SUCCEEDED {
+ description
+ "The operation has been performed without error.";
+ }
+ enum FAILED {
+ description
+ "The operation has been failed, detailed information can be found in error-message.";
+ }
+ }
+ mandatory true;
+ description
+ "This is the result that the operation has been performed.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+ description
+ "The detailed error message when the operation has been failed.";
+ }
+ }
+
+ grouping received-measurement-result {
+ description
+ "This group indicates the result of received power measurements by O-RU.";
+ list received-power-measurement {
+ key "measurement-frequency";
+ description
+ "This list indicates the received power measurements result for the given spectrum.";
+ leaf measurement-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the starting frequency in MHz for which the received power measurement was performed.";
+ }
+ leaf measurement-bandwidth {
+ type measurement-bandwidth;
+ mandatory true;
+ description
+ "This is the measurement unit bandwidth in MHz";
+ }
+ leaf received-power {
+ type decimal64{
+ fraction-digits 4;
+ }
+ units "dBm";
+
+ description
+ "This is the average of the scalar values of received power, converted into dBm units.
+ The received power is mesured over the frequency range from measure-frequency as the lower bound and
+ measure-frequency + measure-bandwidth as the upper bound.
+ The received power is calculated according to what is foreseen by the specific shared spectrum service used,
+ i.e. for CBRS the Winn Forum definition will have to be used, for other shared band services other calculationmethods might be considered/used.";
+ }
+ }
+ }
+
+ grouping request-spectrum-for-measurement {
+ description
+ "This group indicates the requested measurements by O-RU.";
+ leaf measurement-bandwidth {
+ type measurement-bandwidth;
+ mandatory true;
+ description
+ "This is the measurement unit bandwidth in MHz";
+ }
+ leaf-list measurement-start-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the starting frequency bandwidth in MHz to perform the received power measurement.";
+ }
+ }
+
+ container measurement-capability {
+ config false;
+ description
+ "measurement capability object responsible for providing deatils of O-RU's
+ frequency and band measurement capability.";
+ list measurement-bands-supported {
+ key "measurement-band-num";
+ description
+ "This is the list of supported band capability for O-RU received power measurement.";
+ leaf measurement-band-num {
+ type uint8;
+ description
+ "This is the supported bandnum where O-RU can perform the received power measurement. e.g. band48 for CBRS.";
+ }
+ list frequencys-range-supported {
+ key "lower-frequency";
+ description
+ "This list indicates the frequecy range for which the measurements are supported in the O-RU.";
+ leaf lower-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the lower frequency bandwidth in MHz can perform the received power measurement.";
+ }
+ leaf upper-frequency {
+ type uint32;
+ units "MHz";
+ description
+ "This is the upper frequency bandwidth in MHz can perform the received power measurement.";
+ }
+ }
+ leaf-list measurement-bandwidth {
+ type measurement-bandwidth;
+ description
+ "The supported measurement unit bandwidths";
+ }
+ }
+ leaf in-service-measurement {
+ type boolean;
+ default false;
+ description
+ "indicates whether O-RU can support measurements
+ when tx-array carriers are active in measurement band.";
+ }
+
+ leaf in-service-measurement-only-carrier-freq {
+ when "../in-service-measurement = 'true'";
+ type boolean;
+ default false;
+ description
+ "Indicate an O-RU only support measurement on frequency range as carrier is configured on.";
+ }
+
+ leaf-list supported-measurement-points {
+ type enumeration {
+ enum NO_ARRAY {
+ description
+ "O-RU supports measurements without the rx-array name provided.";
+ }
+ enum ONE_ARRAY {
+ description
+ "O-RU supports measurements with a single rx-array name provided.";
+ }
+ enum MULTIPLE_ARRAYS {
+ description
+ "O-RU supports measurements with multiple rx-array names provided.";
+ }
+ }
+ description
+ "Indicates which measurement points O-RU supports.
+ At least one point shall be provided.";
+ }
+ }
+
+ //rpc definitions
+ rpc received-power-measurement-request {
+ description
+ "This rpc is to request a received power measurement in O-RU.";
+ input {
+ uses request-spectrum-for-measurement;
+
+ leaf-list rx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-arrays/up:name";
+ }
+ description
+ "Names of arrays on which the measurements are requested.
+ Depending on the values reported in supported-measurement-points:
+ * if O-RU reports NO_ARRAY, then an empty list can be provided.
+ * if O-RU reports ONE_ARRAY, then a single rx-array can be provided.
+ * if O-RU reports MULTIPLE_ARRAYS, then multiple rx-arrays can be provided.";
+ }
+ }
+ output {
+ uses output-status-grouping;
+ leaf wait-time {
+ type uint32;
+ units "seconds";
+ description
+ "This is the wait time recommended by O-RU. Requester should wait for mentioned time to get the report if status is SUCCEEDED.
+ If the status is FAILED then request should wait for mentioned time before requesting again.";
+ }
+ leaf measurement-id {
+ type uint8;
+ description
+ "Used to identify a measurement RPC, when andling of multiple RPCs.";
+ }
+ }
+ }
+
+ notification power-measurement-result {
+ description "Notification the measurement results for CBRS.";
+ uses output-status-grouping;
+ uses received-measurement-result;
+ leaf measurement-id {
+ type uint8;
+ description
+ "Used to identify a measurement RPC, when andling of multiple RPCs.";
+ }
+ }
+}
--- /dev/null
+module o-ran-hardware {
+ yang-version 1.1;
+ namespace "urn:o-ran:hardware:1.0";
+ prefix "o-ran-hw";
+
+ import ietf-hardware {
+ prefix hw;
+ }
+ import iana-hardware {
+ prefix ianahw;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN hardware.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) Added support for new fan tray component.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) New connector types for RS485 and external IO";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 10.1.0
+
+ 1) Clarifications for Network Energy Saving";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduction of O-RU connector functionality.
+ 2) fixing constraints";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added date-last-service leaf used in pnfRegistration";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added new leaf to indicate whether O-RU supports dying gasp
+ 2) added new identities for PA and FPGA";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new identities to accommodate cross working group use of
+ o-ran-hardware and associated set of augmentations that are backwards
+ compatible to version 1.0.0";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature ENERGYSAVING {
+ description
+ "Indicates that the Radio Unit supports energy saving state.";
+ }
+
+ // identity statements
+ identity O-RAN-RADIO {
+ base ianahw:module;
+ description
+ "Module used as it represents a self-contained sub-system
+ used in /hw:/hardware/hw:component/hw:class to represent
+ an O-RAN RU";
+ }
+
+ identity O-RAN-HW-COMPONENT {
+ base ianahw:module;
+ description
+ "Module used as it represents a self-contained sub-system
+ used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN hardware component";
+ }
+
+ identity O-DU-COMPONENT {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined O-DU hardware component";
+ }
+
+ identity O-RAN-FAN-TRAY {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined fan tray hardware component.";
+ }
+
+ identity O-RU-COMPONENT {
+ base O-RAN-HW-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ any O-RAN defined O-RU hardware component, including a stand-alone
+ O-RU or an O-RU component integrated into a multi-module system.";
+ }
+
+ identity O-RU-POWER-AMPLIFIER {
+ base O-RU-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ an O-RU's power amplifier, and may be used for reporting
+ measurements on a per class basis";
+ }
+
+ identity O-RU-FPGA {
+ base O-RU-COMPONENT;
+ description
+ "Used in /hw:/hardware/hw:component/hw:class to represent
+ an FPGA in an O-RU, and may be used for reporting
+ measurements on a per class basis";
+ }
+
+ identity O-RU-CONNECTOR {
+ base ianahw:hardware-class;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of O-RU connector.";
+ }
+
+ identity O-RU-ANTENNA-CONNECTOR {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU and some
+ antenna function.";
+ }
+
+ identity O-RU-FEEDER {
+ base O-RU-ANTENNA-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is an
+ antenna feeder.";
+ }
+
+ identity O-RU-BF-CAL {
+ base O-RU-ANTENNA-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is for
+ beamforming calibration.";
+ }
+
+ identity O-RU-RS485 {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU and Antenna
+ Line Devices using RS-485 electrical standard.";
+ }
+
+ identity O-RU-EXTIO {
+ base O-RU-CONNECTOR;
+ description
+ "This identity is applicable if the hardware class is some sort
+ of connector capable of interfacing between an O-RU external I/O lines.";
+ }
+
+ // typedef statements
+ typedef energysaving-state {
+ type enumeration {
+ enum UNKNOWN {
+ description
+ "The O-RU is unable to report its energy saving state.";
+ }
+ enum SLEEPING {
+ description
+ "The O-RU is in energy saving state. In this mode M-Plane connection is active. Depending
+ on the O-RU's design - other planes, functions and hardware components which are not needed
+ by the O-RU in energy saving state can be disabled or switched off by the O-RU autonomously.";
+ }
+ enum AWAKE {
+ description
+ "The O-RU is not in an energy saving state.";
+ }
+ }
+ description
+ "New typedef since ietf-hardware only covers power-state
+ for redundancy purposes, not to indicate energy saving operations.
+ For details please see O-RAN WG4 M-Plane specification, clause 9.1.3 'Modify state'";
+ }
+
+ typedef availability-type {
+ type enumeration {
+ enum UNKNOWN {
+ description "The Radio Unit is unable to report its availability state.";
+ }
+ enum NORMAL {
+ description
+ "The equipment is functioning correctly.";
+ }
+ enum DEGRADED {
+ description
+ "The equipment may be reporting a major alarm or may be reporting a critical
+ alarm that is only impacting one or more subcomponent, but where the
+ equipment's implementation permit it to continue operation (server traffic)
+ in a degraded state.
+
+ Used for example, when the equipment has M identical sub-components and
+ when a critical alarm is impacting only N subcomponents, where N<M.";
+ }
+ enum FAULTY {
+ description
+ "The (sub-)components impacted by the critical alarm(s) impact the
+ ability of the equipment to continue operation (serve traffic).";
+ }
+ }
+ description
+ "Equipment's availability-state is derived by matching active faults
+ and their impact to module's operation and enables an equipment to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+
+ // common WG4 and cross-WG augmentations using O-RAN-RADIO identity
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description "New O-RAN parameters for o-ran hardware";
+
+ container label-content {
+ config false;
+ description
+ "Which set of attributes are printed on the Radio Unit's label";
+ leaf model-name {
+ type boolean;
+ description
+ "indicates whether model-name is included on the equipment's label";
+ }
+ leaf serial-number {
+ type boolean;
+ description
+ "indicates whether serial number is included on the equipment's label";
+ }
+ }
+ leaf product-code {
+ type string;
+ config false;
+ mandatory true;
+ description
+ "O-RAN term that is distinct from model-name in ietf-hardware.";
+ }
+ leaf energy-saving-enabled {
+ if-feature "ENERGYSAVING";
+ type boolean;
+ default false;
+ description
+ "This parameter enables the O-RU to enter into energy saving state if there is no need to keep processing
+ paths working.
+ TRUE is used to permit the O-RU to enter energy saving state. If there is still need keep any
+ processing path, functions or HW components working.
+ The O-RU shall keep necessary processing paths working if there is any [tr]x-array-carrier with
+ 'state' != DISABLED.
+ There may be also additional implementation-specific conditions which may require keeping processing paths,
+ functions or HW components working.
+ FALSE is used to prohibit the O-RU to enter or to stay in energy saving state. This value is also used
+ to awake the O-RU from sleeping when the O-RU is already in energy saving state. Setting this value has
+ no effect on [tr]x-array-carrier::active.
+ When the O-RU enters energy saving state, the O-RU shall reduce its power consumption to the lowest level
+ whilst M-plane remains available. Ongoing Netconf session(s) shall not be affected when the O-RU enters
+ energy saving state.
+ The O-RU uses RO node power-state to inform if the O-RU is in energy saving state.
+ NETCONF client should set energy-saving-enabled to FALSE to ensure O-RU is ready to immediately activate a
+ carrier.";
+ }
+ leaf dying-gasp-support {
+ type boolean;
+ default false;
+ config false;
+ description
+ "indicates whether the O-RU supports the dying gasp
+ capability";
+ }
+ leaf last-service-date {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type yang:date-and-time;
+ description
+ "Date of last service or repair of hardware component. How this gets
+ populated is a vendor specific issue.";
+ reference
+ "3GPP 32.692";
+ }
+ }
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(hw:class, 'ianahw:port')) or
+ (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description "New O-RAN parameters for o-ran naming";
+ leaf o-ran-name {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+ must "re-match(current(),'[a-zA-Z0-9][a-zA-Z0-9\\.\\-_]{0,253}[a-zA-Z0-9]')" {
+ error-message "Name must match pattern and length.";
+ }
+ mandatory true;
+ description
+ "O-RAN name needed to bind and match with the name of hw element,
+ to be compliant with O-RAN naming convention.";
+ }
+ }
+
+ augment "/hw:hardware/hw:component/hw:state" {
+ when "(derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+ (derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+ description
+ "new O-RAN defined state";
+ leaf power-state {
+ if-feature "ENERGYSAVING";
+ type energysaving-state;
+ config false;
+ description
+ "The current power saving state for this component.
+ Note - hw:/hardware/component/state/standby-state defined in RFC 4268 is
+ used for redundancy purposes but not for power saving operations.";
+ }
+ leaf availability-state {
+ type availability-type;
+ config false;
+ description
+ "Equipment's availability-state is derived by matching active faults
+ and their impact to module's operation and enables an equipment to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+ }
+
+ augment "/hw:hardware/hw:component" {
+ when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RU-ANTENNA-CONNECTOR'))";
+ description "New O-RAN parameters for O-RAN Antenna connectors";
+
+ leaf connector-label {
+ type string;
+ config false;
+ description
+ "the label used to identify the connector on an O-RU ";
+ }
+ }
+
+
+// augmentations to Notifications
+
+ augment "/hw:hardware-state-oper-enabled" {
+ description "new availability state";
+ leaf availability-state {
+ if-feature hw:hardware-state;
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+ }
+ description
+ "The availability-state of the O-RU.";
+ }
+ }
+
+ augment "/hw:hardware-state-oper-disabled" {
+ description "new availability state";
+ leaf availability-state {
+ if-feature hw:hardware-state;
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+ }
+ description
+ "The availability-state of the O-RU.";
+ }
+ }
+}
--- /dev/null
+module o-ran-ieee802-dot1q-cfm {
+ yang-version 1.1;
+
+ namespace "urn:o-ran:o-ran-ieee802-dot1q-cfm:1.0";
+ prefix "o-ran-ieee802-dot1q-cfm";
+
+
+ import ieee802-dot1q-cfm {
+ prefix "dot1q-cfm";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization
+ "O-RAN Alliance";
+ contact
+ "www.o-ran.org";
+ description
+ "This module defines o-ran augmentations over dot1q.cfm.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2023-04-10 {
+ description
+ "Version 12.0.0
+ 1)initial version ";
+
+ reference "ORAN-WG4.M.0-v12.00";
+
+ }
+
+ augment "/dot1q-cfm:cfm/dot1q-cfm:maintenance-group/dot1q-cfm:mep" {
+ description "augment mep with vid";
+ leaf interface {
+ type if:interface-ref;
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ 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";
+ }
+ }
+}
--- /dev/null
+module o-ran-interfaces {
+ yang-version 1.1;
+ namespace "urn:o-ran:interfaces:1.0";
+ prefix "o-ran-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";
+ }
+
+ import iana-hardware {
+ prefix "ianahw";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN
+ interfaces.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) added new MACsec bypass policy.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new config false only leaf for maximum payload size.
+ 2) new configuration for TCP MSS.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) new functionality to describe over subscribed resources";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 1.2.0
+
+ 1) updated descriptions to clarify operation when vlan-tagging is false";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) increasing max elements for user plane DSCP markings to 64
+ 2) re-organizing layout to facilitate cross-WG adoption, whilst ensuring
+ nodes are syntactically and semantically equivalent";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ 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";
+ }
+
+ typedef mss {
+ type uint16;
+ description
+ "Type definition for TCP Maximum Segment Size.";
+ }
+
+ typedef ethertype-string {
+ type string {
+ pattern '([0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}))';
+ }
+ description
+ "A 2 octect hexadecimal string with octets represented as hex digits
+ separated by colons.";
+ }
+
+ grouping cos-marking {
+ description
+ "Configuration data for CU Plane ethernet CoS marking.
+ This grouping is only applicable to an interface when vlan-tagging is
+ set to TRUE for that interface. In other cases, it may be ignored.";
+ container class-of-service {
+ description
+ "CoS Configuration";
+ leaf u-plane-marking {
+ type pcp;
+ default 7;
+ description
+ "Marking used for default u-plane flows.
+ 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";
+ }
+ list enhanced-uplane-markings{
+ key "up-marking-name";
+ max-elements 4;
+ description
+ "list of mappings for enhanced (non-default) u-plane markings";
+ leaf up-marking-name {
+ type string;
+ description "The name of the marking";
+ }
+ leaf enhanced-marking {
+ type pcp;
+ description "the enhanced u-plane marking";
+ }
+ }
+ }
+ }
+
+ grouping dscp-marking {
+ description
+ "Configuration data for CU Plane DSCP marking";
+ container diffserv-markings {
+ description
+ "DSCP Configuration";
+ leaf u-plane-marking {
+ type inet:dscp;
+ default 46;
+ description
+ "Marking used for default u-plane flows.
+ 46 represents expedited forwarding";
+ }
+ leaf c-plane-marking {
+ type inet:dscp;
+ default 46;
+ description "46 represents expedited forwarding";
+ }
+ 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";
+ }
+ list enhanced-uplane-markings{
+ key up-marking-name;
+ max-elements 64;
+ description
+ "list of mappings for enhanced (non-default) u-plane markings";
+ leaf up-marking-name {
+ type string;
+ description "The name of the marking";
+ }
+ leaf enhanced-marking {
+ type inet:dscp;
+ description "the enhanced u-plane marking";
+ }
+ }
+ }
+ }
+
+ grouping tcp-config {
+ description "grouping for per-interface tcp configuration";
+
+ container tcp {
+ presence "tcp configuration";
+ description "per interface TCP configuration";
+
+ leaf mss-adjust {
+ type mss;
+ description
+ "Maximum Segment Size (MSS) used in the MSS Option sent
+ in the TCP initial handshake over this interface and
+ which specifies an upper bound for the TCP MSS of packets
+ that can be received on this interface.
+
+ NOTE, this can be used to reduce the packet size for NETCONF/TLS
+ or NETCONF/SSH to reduce head-of-line blocking due to M-Plane
+ packets sent over the fronthaul downlink interface";
+ }
+ }
+ }
+
+ grouping macsec-bypass-grouping {
+ description "grouping for MACsec bypass policy";
+
+ container macsec-bypass-policy {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description
+ "This is a top level container for MACsec policies.
+ These policies can only be enforced on the base
+ Ethernet interface.
+
+ MAC, EtherType and vlan-id based policies are defined to
+ be applied to the base-interface.
+
+ VLAN based policies can additionally be implicitly
+ enforced by configuring the SecY on a VLAN interface and
+ do not use this container.";
+
+ list policy {
+ key "name";
+ description
+ "Each policy list entry has a matching criteria. Any frame
+ matching the criteris will be forwarded via the uncontrolled port.";
+ leaf name {
+ type string;
+ description
+ "The name of the MACsec policy.";
+ }
+ choice policy-type {
+
+ case mac {
+ leaf-list destination-mac-address {
+ type yang:mac-address;
+ description
+ "Destination IEEE 802 Media Access Control (MAC)
+ address of frames egressing via interface.";
+ }
+ }
+ case ethertype {
+ leaf-list ethertype {
+ type ethertype-string;
+ description
+ "list of ethertypes in frames egressing the interface.";
+ }
+ }
+ case vlan-id {
+ leaf-list vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "list of vlan-ids in frames egressing the interface.";
+ }
+ }
+ description
+ "choice of policy types";
+ }
+ }
+ }
+ }
+
+ grouping macsec-bypass-capabilities {
+ description "grouping for MACsec bypass capabilities";
+
+ container macsec-bypass-capabilities {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ config false;
+ description
+ "This is a container for MACsec bypass capabilities.";
+
+ leaf per-interface-policy-list-max-elements {
+ type uint16;
+ default 100;
+ description
+ "the maximum number of list of elements
+ for each instance of the list
+ /if:interfaces/if:interface/o-ran-int:/macsec-bypass-policy/o-ran-int/policy.";
+ }
+ leaf cummulative-policy-list-max-elements {
+ type uint16;
+ default 100;
+ description
+ "the maximum cummulative number of list entries for
+ all instances of the list
+ /if:interfaces/if:interface/o-ran-int:/macsec-bypass-policy/o-ran-int/policy";
+ }
+ leaf-list supported-policy {
+ type enumeration {
+ enum MAC {
+ description
+ "O-RU supports MAC address based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ enum ETHERTYPE {
+ description
+ "O-RU supports ethertype based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ enum VLAN {
+ description
+ "O-RU supports vlan-id based by-pass policies
+ for frames egressing a base-interface.";
+ }
+ }
+ description
+ "The type of mac bypass policies supported by the O-RU
+ on frames egressing a base-interface.
+
+ An O-RU supporting the MACSEC-BYPASS-POLICY shall include
+ at least one of the defined policies in this list.";
+ }
+ }
+ }
+
+ rpc reset-interface-counters {
+ description
+ "Management plane triggered restart of the interface counters.";
+ }
+
+// Cross Working Group Augmentations Follow
+
+// Cross Working Group augmentations for basic Ethernet leafs
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description "Applies to Ethernet interfaces";
+ }
+ description
+ "Augment the interface model with parameters for
+ base Ethernet interface";
+
+ 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 maximum-ethernet-payload-size {
+ type uint16 {
+ range "1500 .. 9000";
+ }
+ units bytes;
+ config false;
+ description
+ "The maximum size of the Ethernet payload that an O-RU can transmit
+ or receive on the interface (excluding any frame header,
+ maximum frame payload size, frame checksum
+ sequence and any 802.1Q tag).
+
+ TAKE NOTE - THE FORMULA IN THIS DESCRIPTION DIFFERS FROM THE
+ FORMULA IN THE DESCRIPTION OF THE l2-mtu LEAF.
+
+ THIS LEAF CORRESPONDS TO THE DATA/PAYLOAD **ONLY** AND DOES **NOT**
+ INCLUDE ANY OTHER FRAME OVERHEAD LIKE SOURCE/DESTINATION ADDRESSES,
+ LENGTH, 802.1Q TAGS OR FCS.";
+ }
+
+ leaf vlan-tagging {
+ type boolean;
+ default true;
+ description
+ "Indicates if VLAN tagging is used.
+ Default true is used to enable equipment to autonomously discover that
+ it is connected to a trunk port.
+
+ This may be set to false, for example, when the O-RU is directly
+ connected to the O-DU. In such cases, native Ethernet frames may be
+ used across the O-RAN interface, i.e., any PCP markings defined
+ in the cos-markings grouping are NOT used by the O-RU and any default
+ value or configured value using those leafs may be ignored by the O-RAN
+ equipment.";
+ }
+ uses cos-marking;
+
+// interface-grouping insert - begin;
+
+ leaf-list interface-groups-id {
+ type leafref {
+ path "/if:interfaces/o-ran-int:interface-grouping/o-ran-int:interfaces-groups/o-ran-int:interface-group-id";
+ }
+ config false;
+ description
+ "an optional leaf used when the sustained rate able to be supported by an interface
+ is less than nominal bit rate indicated by o-ran-transceiver.yang
+
+ Identifies interface grouping particular physical hardware MAC address belongs to.";
+ }
+
+// interface-grouping insert - end;
+ }
+
+// augmentation for MACsec bypass policies
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description "Applies to Ethernet interfaces";
+ }
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description
+ "Augment the interface model with bypass parameters for
+ base Ethernet interface";
+
+ uses macsec-bypass-grouping;
+ }
+
+ augment "/if:interfaces" {
+ if-feature feat:MACSEC-BYPASS-POLICY;
+ description "augmentation for MACsec bypass capabilitites";
+
+ uses macsec-bypass-capabilities;
+ }
+
+
+// Cross Working Group augmentation for l2vlan interfaces for VLAN definition
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:l2vlan'";
+ description "augments for VLAN definition";
+ leaf base-interface {
+ type if:interface-ref;
+ must "/if:interfaces/if:interface[if:name = current()]"
+ + "/o-ran-int:vlan-tagging = 'true'" {
+ description
+ "The base interface must have VLAN tagging enabled.";
+ }
+ description
+ "The base interface for the VLAN sub-interface.";
+ }
+ leaf vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The VLAN-ID.";
+ }
+ }
+
+// Cross Working Group augmentation for both ethernetCsmacd and l2vlan interfaces
+
+ augment "/if:interfaces/if:interface" {
+ when "(if:type = 'ianaift:ethernetCsmacd') or
+ (if:type = 'ianaift:l2vlan')" {
+ description "Applies to ethernetCsmacd and l2vlan interfaces";
+ }
+ description
+ "Augment the interface model with parameters for all
+ both ethernetCsmacd and l2vlan interfaces.";
+ leaf last-cleared {
+ type yang:date-and-time;
+ config false;
+ description
+ "Timestamp of the last time the interface counters were
+ cleared.";
+ }
+ }
+
+// Cross Working Group augmentation to ietf-ip covering DSCP for M-Plane
+
+augment "/if:interfaces/if:interface/ip:ipv4" {
+ description "augments for IPv4 based M-Plane transport";
+ leaf m-plane-marking {
+ type inet:dscp;
+ default 18;
+ description "18 represents AF21 or 'immediate traffic'";
+ }
+}
+augment "/if:interfaces/if:interface/ip:ipv6" {
+ description "augments for IPv6 based M-Plane transport";
+ leaf m-plane-marking {
+ type inet:dscp;
+ default 18;
+ description "18 represents AF21 or 'immediate traffic'";
+ }
+}
+
+// Cross Working Group augmentation to ietf-ip covering TCP MSS for M-Plane
+
+augment "/if:interfaces/if:interface/ip:ipv4" {
+ if-feature feat:PER-INT-TCP-MSS;
+ description "augments for IPv4 based CUS transport";
+ uses tcp-config;
+}
+augment "/if:interfaces/if:interface/ip:ipv6" {
+ if-feature feat:PER-INT-TCP-MSS;
+ description "augments for IPv6 based CUS transport";
+ uses tcp-config;
+}
+
+
+// WG4 Specific Augmentations Follow
+
+// WG4 Augmentation for basic Ethernet leafs
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:ethernetCsmacd'" {
+ description
+ "Applies to WG4 Ethernet interfaces for alias MAC based CU-Plane";
+ }
+ if-feature ALIASMAC-BASED-CU-PLANE;
+ description
+ "Augment the interface model with parameters for
+ base Ethernet interface";
+
+ leaf-list alias-macs {
+ type yang:mac-address;
+
+ description
+ "Augments interfaces with range of alias MAC addresses.";
+ }
+
+ }
+
+// WG4 Augmentation for both ethernetCsmacd and l2vlan interfaces
+
+ augment "/if:interfaces/if:interface" {
+ when "(if:type = 'ianaift:ethernetCsmacd') or
+ (if:type = 'ianaift:l2vlan')" {
+ description "Applies to ethernetCsmacd and l2vlan interfaces";
+ }
+ description
+ "Augment the interface model with parameters for all
+ both ethernetCsmacd and l2vlan interfaces.";
+ leaf mac-address {
+ type yang:mac-address;
+
+ description
+ "The MAC address of the interface.";
+ }
+
+ container port-reference {
+ description
+ "a port reference used by other O-RAN modules";
+ leaf port-name {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'ianahw:port')";
+// TAKE NOTE - depending on version of pyang, this may generate various
+// warnings, e.g., warning: XPath for "port-name" does not exist
+ description
+ "O-RAN interfaces use a reference to a physical port component.
+
+ In this case, the component name referenced must be of class type
+ port, i.e., when /hw:hardware/hw:component/hw:class is derived from
+ ianahw:port";
+ }
+ leaf 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 equipment, i.e., cannot be
+ changed during equipment reboots.";
+ }
+ }
+ }
+
+// WG4 specific augmentation to ietf-ip covering DSCP for CUS Plane
+
+ augment "/if:interfaces/if:interface/ip:ipv4" {
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv4 based CUS transport";
+ uses dscp-marking;
+ }
+ augment "/if:interfaces/if:interface/ip:ipv6" {
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv6 based CUS transport";
+ uses dscp-marking;
+ }
+
+// Other Working Group Specific Augmentations Follow Here
+
+// interface-grouping insert - begin;
+
+ augment "/if:interfaces" {
+ description "augments interfaces for groupings of physical hardware addresses that can be used to group Ethernet ports";
+
+ container interface-grouping {
+
+ presence
+ "indicates maximum sustained throughput of an O-RU is less than the combined bandwidth of all physical ports";
+
+ config false;
+
+ description
+ "A container used by an O-RU where the maximum sustained throughput
+ of an O-RU is less than the combined bandwidth of all physical ports";
+
+ list interfaces-groups {
+ key interface-group-id;
+ description "List of interface groups.";
+
+ leaf interface-group-id {
+ type uint8;
+ description "interface group identifier.";
+ }
+
+ leaf max-sustainable-ingress-bandwidth {
+ type uint32;
+ units Mbps;
+ description
+ "Maximum sustainable ingress bandwidth the interface group can handle. The sustainable bandwidth is calculated
+ over one radio frame.
+
+ The peak ingress bandwidth may exceed the sustainable bandwidth for periods shorter than a radio frame period.";
+ }
+
+ leaf max-sustainable-egress-bandwidth {
+ type uint32;
+ units Mbps;
+ description
+ "Maximum sustainable egress bandwidth the interface group can handle. The sustainable bandwidth is calculated
+ over one radio frame.";
+ }
+ }
+ }
+ }
+// interface-grouping insert - end;
+
+}
--- /dev/null
+module o-ran-laa-operations {
+ yang-version 1.1;
+ namespace "urn:o-ran:laa-operations:1.0";
+ prefix "o-ran-laa-operations";
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for DFS measurement.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.2.0
+
+ 1) removing non-ASCII characters from model";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) corrected error in module reference for LAA feature";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ typedef band-num {
+ type enumeration {
+ enum BAND_46_SUBBAND_A {
+ description
+ "46a: 5150 MHz - 5250 MHz";
+ }
+ enum BAND_46_SUBBAND_B {
+ description
+ "46b: 5250 MHz - 5350 MHz";
+ }
+ enum BAND_46_SUBBAND_C {
+ description
+ "46c: 5470 MHz - 5725 MHz";
+ }
+ enum BAND_46_SUBBAND_D1 {
+ description
+ "46d1: 5725 MHz - 5850 MHz";
+ }
+ enum BAND_46_SUBBAND_D2 {
+ description
+ "46d2: 5850 MHz - 5925 MHz";
+ }
+ }
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+
+ grouping band-configuration {
+ description
+ "Grouping for band configuration";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+ leaf-list channel-center-frequency {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency in KHz";
+ }
+ }
+
+ grouping measurement-parameters {
+ description
+ "Grouping for measurement parameters";
+
+ leaf duration-per-channel {
+ type uint16;
+ units milliseconds;
+ description
+ "This value indicates measurement duration per channel in milliseconds.";
+ }
+
+ leaf maximum-response-time {
+ type uint16;
+ units seconds;
+ description
+ "This value indicates maximum response time (i.e., timer) in seconds.";
+ }
+ }
+
+ grouping channel-result-element {
+ description
+ "Grouping for channel result element";
+
+ leaf measured-channel {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency for which the result is computed in KHz.";
+ }
+
+ leaf occupancy-ratio {
+ type uint8;
+ units percent;
+ description
+ "This value indicates occupancy ratio in percentage.";
+ }
+
+ leaf average-rssi {
+ type int8;
+ units dBm;
+ description
+ "This value indicates average RSSI in dBm";
+ }
+ }
+
+ grouping band-result-element {
+ description
+ "Grouping for band result element";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the band for which the result is computed.";
+ }
+
+ leaf measurement-success {
+ type boolean;
+ description
+ "This value indicates whether the measurement is successful for the given band.";
+ }
+ leaf failure-message {
+ when "../measurement-success='false'";
+ type enumeration {
+ enum TIMEOUT {
+ description "Timed out waiting for measurement completion.";
+ }
+ }
+ description "This value indicates the detailed error message for failure of the measurement at O-RU.";
+ }
+
+ list channel-result {
+ when "../measurement-success='true'";
+ key "measured-channel";
+ description "Results for a particular channel";
+
+ uses channel-result-element;
+ }
+ }
+
+ //rpc definitions
+ rpc start-measurements {
+ if-feature mcap:LAA;
+ description "Measurements for Carrier-Selection and Dynamic Frequency Selection (DFS)";
+ input {
+ list band-config {
+ key "band-number";
+ description "Per band configuration for measurements.";
+
+ uses band-configuration;
+ }
+
+ uses measurement-parameters;
+ }
+
+ output {
+ list band-config {
+ key "band-number";
+ description "Output list for all the bands requested for measurements.";
+
+ leaf band-number {
+ type band-num;
+ description
+ "This value indicates the list of bands supported as per the document,
+ 3GPP TS 36.104 V14.2.0 (2016-12), 'Section 5.5 Operation bands'.";
+ }
+ leaf-list carrier-center-frequency {
+ type uint16;
+ units kilohertz;
+ description
+ "This value indicates carrier centre frequency in KHz";
+ }
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "This indicates the measurements for particular sub band is accepted at O-RU.";
+ }
+ enum REJECTED {
+ description "This indicates the measurements for particular sub band is rejected at O-RU.";
+ }
+ }
+ description "This value indicates the status of the measurement acceptance at O-RU.";
+ }
+
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "This value indicates the detailed error message for the measurement being rejected at O-RU.";
+ }
+ }
+ }
+ }
+
+ // notifications
+ notification measurement-result {
+ if-feature mcap:LAA;
+ description "Notification to provide the results of carrier selection and DFS.";
+ list band-result {
+ key "band-number";
+ description "Results for a particular sub band under band 46.";
+
+ uses band-result-element;
+ }
+ }
+}
--- /dev/null
+module o-ran-laa {
+ yang-version 1.1;
+ namespace "urn:o-ran:laa:1.0";
+ prefix "o-ran-laa";
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration for Carrier-selection and dynamic frequency selection (DFS).
+ Also this module defines operations for DFS measurement.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified description for laa-ending-dwpts-supported and
+ laa-starting-in-second-slot-supported.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) fixing broken constraints (configuration cannot be dependent on
+ operational state). This is a backwards incompatible revision.
+
+ As these constraints only apply when the LAA feature is used, and also
+ when considering the limited number of implementation that need to be
+ taken into consideration for backwards compatibility, it has been
+ agreed to NOT increment the namespace integer.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ grouping laa-configuration {
+ description
+ "Grouping for LAA configuration";
+
+ leaf number-of-laa-scarriers {
+ type uint8;
+ description "Number of LAA secondary carriers to be supported at O-RU.";
+ }
+
+ leaf multi-carrier-type {
+ type enumeration {
+ enum A1 {
+ description "multi-carrier type A1";
+ }
+ enum A2{
+ description "multi-carrier type A2";
+ }
+ enum B1{
+ description "multi-carrier type B1";
+ }
+ enum B2{
+ description "multi-carrier type B2";
+ }
+ }
+ description
+ "This value indicates the list of multi carrier types which as per the document,
+ 3GPP TS 36.213 V13.6.0 (2017-06) 15.1.5 Channel access procedure for transmission(s) on multiple carriers.";
+ }
+
+ leaf multi-carrier-tx {
+ type boolean;
+ description
+ "This value indicates whether self-deferral is activated or not.";
+ }
+
+ leaf multi-carrier-freeze {
+ when "../multi-carrier-type='A1'";
+ type boolean;
+ description "This value indicates if the absence of other technology in the unlicensed band can be guaranteed.";
+ }
+
+ leaf laa-ending-dwpts-supported {
+ type boolean;
+ description
+ "This value is configured by NETCONF client(O-DU) and indicates whether LAA ending in DwPTS is supported by O-DU.";
+ }
+
+ leaf laa-starting-in-second-slot-supported {
+ type boolean;
+ description
+ "This value is configured by NETCONF client(O-DU) and indicates whether LAA starting in second slot is supported by O-RU";
+ }
+ }
+
+ container laa-config {
+ must "number-of-laa-scarriers <= /mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-number-of-laa-scarriers" {
+ error-message "number of laa secondary carriers must be less than supported number of laa scells.";
+ }
+ presence "indicates LAA configuration";
+ description "Container to specify all LAA specific configuration";
+
+ uses laa-configuration;
+ }
+}
--- /dev/null
+module o-ran-lbm {
+ yang-version 1.1;
+ namespace "urn:o-ran:lbm:1.0";
+ prefix "o-ran-lbm";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-interfaces {
+ prefix if;
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio loop-back protocol (IEEE 802.1ag).
+ It is derived from MEF-38 (Service OAM Fault Management YANG Modules, April 2012)
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 1.4.0
+
+ 1) allow 0 to be included in primary-vid.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 1.3.0
+
+ 1) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.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";
+ }
+
+// grouping
+
+ grouping md-group {
+ description "the maintenance domain grouping";
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ 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 Maintenance
+ 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 leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ 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 union {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:vlan-id";
+ }
+ type uint16 {
+ range "0";
+ }
+ }
+ 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int: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";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+// top level container
+ container md-data-definitions {
+ description
+ "Data definitions related to the maintenance domains used for supporting
+ Ethernet loopback connectivity checks";
+ uses md-group;
+ }
+}
--- /dev/null
+module o-ran-module-cap {
+ yang-version 1.1;
+ namespace "urn:o-ran:module-cap:1.0";
+ prefix "o-ran-module-cap";
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "or-feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for multiple beamid tables.
+ 2) remove import by revision date for o-ran-compression-factors.
+ 3) Support for deep hibernate sleep mode.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+
+ 1) Introduce bundle-offset-in-se11-supported";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduce TRX-control and advanced sleep modes";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) Clarify the parameter number-of-spatial-streams
+ 2) Introduce NB-IoT";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) Deprecation of power-related capabilities and addition of min-gain
+ 2) se6 rb bit handling for rbgSize equal to zero";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) clarified description statements for component carrier
+ 2) style guide corrections
+ 3) introducing new feature for ACK NACK feedback
+ 4) deprecation for params in band-capabilities";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) aded new parameter st6-4byte-alignment-required";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) Typographical corrections in descriptions.
+ 2) deprecation of compression-method-grouping";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) Added support for external antenna delay handling ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.
+ 2) removed non-ASCII characters
+ 3) clarified number-of-ru-ports_dl/ul description ";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added support for optimising coupling-via-frequency-and-time-with-priorities
+ by adding enhancement to existing method through a new leaf node";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) added RO capability to expose O-RU's ability to support udCompLen record in U-Plane section header fields
+ 2) feature indicating support for static PRACH configuration introduced
+ 3) feature indicating support for static SRS configuration introduced
+ 4) feature indicating support for TDD pattern configuration introduced
+ 5) backward compatible change to introduce new O-RU's features related
+ to Section Description Priority to serve for CUS-Plane C";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) Adding optional little endian support
+ 2) Added support for Dynamic Spectrum Sharing feature
+ 3) Enable number-of-ru-ports to be different between dl and ul
+ 4) Enable regularizationFactor to be signalled outside of section type 6
+ 5) Enable PRACH preamble formats supported to be signalled by O-RU
+ 6) adding support for selective RE sending
+ 7) supporting new section extension for grouping multiple ports
+ 8) signalling to enable O-RU to indicate is requires unique ecpri sequence id
+ for eAxC_IDs serving for UL and DL for the same Component Carrier";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible change to introduce new RW leafs for use in
+ constraints in uplane-config and laa models.
+ 2) removing unnecessary relations to band 46 in uplink";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature LAA {
+ description
+ "Indicates that the Radio Unit supports LAA.";
+ }
+
+ feature EAXC-ID-GROUP-SUPPORTED {
+ description
+ "indicates that the Radio Unit supports EAXC-ID-GROUP-SUPPORTED.";
+ }
+
+ feature TRANSPORT-FRAGMENTATION {
+ description
+ "This leaf is used to indicate whether the O-RU supports O-RAN Radio Transport Fragmentation";
+ }
+
+ feature DSS_LTE_NR {
+ description
+ "Indicates that the Radio Unit supports Dynamic Spectrum Sharing between LTE and NR.";
+ }
+
+ feature PRACH-STATIC-CONFIGURATION-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configuration of PRACH (Physical Random Access Channel) pattern in the static manner, so that PRACH U-Plane traffic can be processed by RU without receiving C-Plane messages conveying the PRACH configuration.";
+ }
+
+ feature SRS-STATIC-CONFIGURATION-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configuration of SRS (Sounding Reference Signal Channel) pattern in the static manner, so that SRS U-Plane traffic can be processed by RU without receiving C-Plane messages conveying the SRS configuration.";
+ }
+
+ feature CONFIGURABLE-TDD-PATTERN-SUPPORTED {
+ description
+ "This leaf is used to indicate O-RU's support for configurable TDD pattern.";
+ }
+
+ typedef sub-band-string {
+ type string {
+ pattern [ABCD];
+ }
+ description "Sub bands definition";
+ }
+
+ typedef scs-config-type {
+ 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_3_75 {
+ value 13;
+ description
+ "3.75kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ enum KHZ_7_5 {
+ value 15;
+ description
+ "7.5kHz sub carrier spacing";
+ }
+ }
+
+ description
+ "Scs configuration type definition";
+ }
+
+ grouping compression-method-grouping {
+ status deprecated;
+ description
+ "Grouping for compression method.
+ Note: This grouping is deprecated. Please use the one from o-ran-compression-factors module.";
+
+ 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 decompression will be used";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompression method will be used";
+ }
+
+ enum BEAMSPACE {
+ description
+ "Beamspace compression and decompression will be used";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression will be used";
+ }
+
+ enum BLOCK-FLOATING-POINT-SELECTIVE-RE-SENDING {
+ description
+ "block floating-point with selective re sending
+ compression and decompression will be used";
+ }
+ enum MODULATION-COMPRESSION-SELECTIVE-RE-SENDING {
+ description
+ "modulation compression with selective re sending
+ compression and decompression will be used";
+ }
+ }
+ description
+ "Compression method which can be supported by the O-RU.
+ An O-RU may further refine the applicability of compression
+ methods per endpoint using o-ran-uplane-conf.yang model";
+ }
+ }
+
+ grouping sub-band-max-min-ul-dl-frequency {
+ description
+ "Grouping for defining max and min supported frequency - DL and UL.";
+
+ leaf max-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Maximum supported downlink frequency in the
+ LAA sub-band. Value unit is Hz.";
+ }
+
+ leaf min-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Minimum supported downlink frequency in the
+ LAA sub-band. Value unit is Hz.";
+ }
+ }
+
+ grouping 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 realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if O-RU supports real-time variable bit with";
+ }
+
+ list compression-method-supported {
+ uses cf:compression-details;
+
+ leaf-list fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "List of fs offset values supported with this IQ format / compression method;
+ fs-offset adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer to endpoints to have information what
+ exactly is supported on particular endpoint";
+ }
+
+ 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";
+ }
+
+ leaf regularization-factor-se-supported {
+ type boolean;
+
+ description
+ "Informs if regularizationFactor in section type 5 is
+ supported(true) or not(false)";
+ }
+
+ leaf little-endian-supported {
+ type boolean;
+ default false;
+
+ description
+ "All O-RUs support bigendian byte order. This node informs if module supports the
+ the optional capability for little endian byte order for C/U plane data flows.
+
+ Note - little endian support does not invalidate bigendian support.";
+ }
+
+ leaf st6-4byte-alignment-required {
+ type boolean;
+ default false;
+
+ description
+ "An optional flag indicating whether O-RU requires 4-byte aligned Section Type 6 or not.
+ If 4-byte aligned Section Type 6 is required, O-RU shall set this flag to 'true'.
+ If the leaf is ommitted or set to 'false', the O-RU operates using 1-byte aligned Section Type 6.
+ An O-DU recovering a value of 'true' shall ensure that Section Type 6 shall be
+ sent with 4-byte aligned messages, as described in clause 'Elements for the C-Plane Protocol' of
+ the CUS-Plane specification.";
+ }
+
+ leaf se6-rb-bit-supported {
+ type boolean;
+ default false;
+
+ description
+ "If this leaf node has a value 'true', then O-DU may use the 'rb' bit, in which case
+ when the O-DU sets the 'rb' bit to one, it shall also set the value of 'rbgsize' to zero and the
+ O-RU shall interpret the value of 'rb' bit as applicable to this data section. Refer 'SE 6: Non-contiguous
+ PRB allocation in time and frequency domain' requirement #3 of the CUS-Plane specification.";
+ }
+ }
+
+ grouping scs-a-b {
+ description
+ "Grouping for scs-a and scs-b";
+ leaf scs-a{
+ type scs-config-type;
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf scs-b{
+ type scs-config-type;
+ description
+ "Sub-carrier spacing configuration";
+ }
+ }
+
+ grouping ul-mixed-num-required-guard-rbs {
+ description
+ "Required number of guard resource blocks for the combination of
+ sub-carrier spacing values for uplink";
+ uses scs-a-b;
+ 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";
+ }
+ }
+
+ grouping dl-mixed-num-required-guard-rbs {
+ description
+ "Required number of guard resource blocks for the combination of
+ sub-carrier spacing values for uplink";
+ uses scs-a-b;
+ 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";
+ }
+ }
+
+ grouping sleep-mode-capability-info {
+ description
+ "Grouping for sleep mode capabilities supported by the O-RU.";
+
+ list sleep-modes {
+ key "sleep-mode-type";
+ description
+ "List of sleep mode type supported.";
+
+ leaf sleep-mode-type {
+ type enumeration {
+ enum SLEEP_MODE_0 {
+ description "O-RU supports Sleep Mode 0.";
+ }
+ enum SLEEP_MODE_1 {
+ description "O-RU supports Sleep Mode 1.";
+ }
+ enum SLEEP_MODE_2 {
+ description "O-RU supports Sleep Mode 2.";
+ }
+ enum SLEEP_MODE_3 {
+ description "O-RU supports Sleep Mode 3.";
+ }
+ }
+ description
+ "Type of sleep mode supported.";
+ }
+
+ leaf wake-up-duration {
+ type uint32;
+ units microseconds;
+ description "Wake-up duration for a particular sleep mode.";
+ }
+
+ leaf wake-up-duration-guaranteed {
+ type boolean;
+ description
+ "Informs whether the O-RU guarantees the wakeup duration for a particular sleep mode.
+ For sleep-mode-type reported as 'SLEEP_MODE_0', the wake-up-duration-guaranteed shall be reported as 'true'";
+ }
+ }
+
+ leaf defined-duration-sleep-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports the defined-duration sleep functionality.";
+ }
+
+ leaf undefined-duration-sleep-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports the undefined-duration sleep functionality.";
+ }
+ }
+
+ grouping trx-control-capability-info {
+ description
+ "A grouping with parameters for TRX-CONTROL capabilities supported by the O-RU";
+
+ list supported-trx-control-masks {
+ key "index";
+ description
+ "List of supported TRX control masks.";
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list.";
+ }
+
+ leaf mask-name {
+ type string;
+ description
+ "Unique name for each supported TRX control mask.";
+ }
+
+ leaf antenna-mask {
+ type binary;
+ description
+ "Supported Antenna Mask.";
+ }
+ }
+ uses sleep-mode-capability-info;
+ }
+
+ grouping asm-capability-info {
+ description
+ "A grouping with parameters for advanced sleep mode capabilities supported by the O-RU";
+
+ uses sleep-mode-capability-info;
+ }
+
+ grouping ru-capabilities {
+ description
+ "Structure representing set of capabilities.";
+
+ leaf ru-supported-category {
+ type enumeration {
+ enum CAT_A {
+ description
+ "Informs that precoding is not supported in O-RU";
+ }
+ enum CAT_B {
+ description
+ "Informs that precoding is supported in O-RU";
+ }
+ }
+
+ description
+ "Informs about which category O-RU supports";
+ }
+
+ leaf number-of-ru-ports {
+ type uint8;
+ status deprecated;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic (choice is as per configuration)
+ - the number of O-RU ports is the product of number of spatial streams (leaf number-of-spatial-streams) and number of numerologies O-RU supports.
+ For example, if the number of spatial streams is 4 then the number of O-RU ports is 8 when PUSCH and PRACH are processed in the different endpoints.
+ In case there are specific endpoints that support non-time-managed traffic only
+ - the number of O-RU ports calculated with above mentioned equation is extended by number of endpoints supporting only non-time-managed traffic.";
+ }
+ leaf number-of-ru-ports-ul {
+ type uint8;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic AND static channel configuration (choice is as per configuration)
+ - the upper bound of the number of O-RU ports for uplink which is derived from number of UL spatial streams or layers
+ and associated numerology O-RU supports.
+ Numerology capability per spatial stream or layer is based on eaxc id description in CUS specification section entitled
+ 'ecpriRtcid / ecpriPcid (real time control data / IQ data transfer message series identifier)'
+ For example, if O-RU supports for each of 'N' spatial streams or layers 'M' numerologies (as it applies to PUSCH and PRACH), number of ports is N * M.
+ In case there are specific endpoints that support non-time-managed traffic only
+ - the number of O-RU ports calculated is extended by number of endpoints supporting only non-time-managed traffic.
+ Additionally, if there are specific endpoints that support static channel configuration only(e.g. static PRACH)
+ - the number of O-RU ports calculated above is further extended by number of endpoints supporting static channel configuration only.";
+ }
+ leaf number-of-ru-ports-dl {
+ type uint8;
+ description
+ "Assuming all endpoints support time-managed traffic AND non-time-managed traffic (choice is as per configuration)
+ - the upper bound of the number of O-RU ports for downlink which is derived from number of DL spatial streams or layers
+ and associated numerology O-RU supports.
+ Numerology capability per spatial stream or layer is based on eaxc id description in CUS specification section entitled
+ 'ecpriRtcid / ecpriPcid (real time control data / IQ data transfer message series identifier)'
+ For example, if O-RU supports for each of 'N' spatial streams or layers 'M' numerologies, number of ports is N * M.
+ In case there are specific endpoints that support non-time-managed traffic only.
+ - the number of O-RU ports calculated with above mentioned equation is extended by number of endpoints supporting only non-time-managed traffic";
+ }
+
+ leaf number-of-spatial-streams {
+ type uint8;
+ description
+ "This value indicates the maximum accumulated number of spatial streams supported by O-RU for DL and UL.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details.";
+ }
+
+ leaf number-of-spatial-streams-dl {
+ type uint8;
+ description
+ "The maximum number of DL spatial streams that O-RU supports.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details.";
+ }
+
+ leaf number-of-spatial-streams-ul {
+ type uint8;
+ description
+ "The maximum number of UL spatial streams that O-RU supports.
+ For definition of spatial stream, please refer to CUS plane specification clause 3.1 for details..";
+ }
+
+ leaf max-num-bands {
+ type uint16;
+ description "maximum number of bands supported by the O-RU";
+ }
+
+ leaf max-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Maximum Power per PA per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf min-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Minimum Power per PA per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ 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";
+
+ uses format-of-iq-sample;
+ }
+
+ list ul-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "List of required number of guard resource blocks
+ for the combination of sub-carrier spacing values for downlink";
+
+ uses ul-mixed-num-required-guard-rbs;
+ }
+ list dl-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "List of required number of guard resource blocks
+ for the combination of sub-carrier spacing values for uplink";
+
+ uses dl-mixed-num-required-guard-rbs;
+ }
+
+ leaf energy-saving-by-transmission-blanks {
+ type boolean;
+ mandatory true;
+ description
+ "Parameter informs if unit supports energy saving by transmission blanking";
+ }
+ container eaxcid-grouping-capabilities {
+ if-feature o-ran-module-cap:EAXC-ID-GROUP-SUPPORTED;
+ description
+ "a container with parameters for eaxcid grouping";
+ leaf max-num-tx-eaxc-id-groups {
+ type uint8;
+ description
+ "Maximum number of configurable tx-eaxc-id-group supported by O-RU.";
+ }
+ leaf max-num-tx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of eAxC IDs per tx-eaxc-id-group supported by O-RU, where each group is a union of the 'member-tx-eaxc-id's and a 'representative-tx-eaxc-id'.";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ type uint8;
+ description
+ "the maximum number of groups with the eAxC IDs those are assigned to low-level-rx-links.";
+ }
+ leaf max-num-rx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of eAxC IDs per rx-eaxc-id-group supported by O-RU, where each group is a union of the 'member-rx-eaxc-id's and a 'representative-rx-eaxc-id'.";
+ }
+ }
+
+ leaf dynamic-transport-delay-management-supported {
+ type boolean;
+ mandatory true;
+ description
+ "Parameter informs if unit supports dynamic transport delay management through eCPRI Msg 5";
+ }
+
+ leaf support-only-unique-ecpri-seqid-per-eaxc {
+ type boolean;
+ default false;
+ description
+ "Parameter informs if O-RU expects unique eCPRI sequence id for eAxC_IDs serving
+ for UL and DL for the same Component Carrier.
+
+ Note: If this is set to TRUE, the O-DU can decide to either use different eAxC_IDs for UL and
+ DL or can generate unique sequence ID per eAxC_ID.
+
+ TAKE NOTE: This leaf is backwards compatible from an O-RU perspective BUT an O-RU that
+ sets this leaf to TRUE may result in incompatibilities when operating with an O-DU
+ designed according to the O-RAN CUS-Plane Specification v02.00, e.g., if the O-DU is
+ incapable of using different eAxC values between UL and DL";
+ }
+
+ container coupling-methods {
+ description
+ "O-RU's capabilities related to supported C-Plane and U-Plane coupling methods";
+
+ leaf coupling-via-frequency-and-time {
+ type boolean;
+ description
+ "Coupling via frequency and time; see methods of coupling of C-plane and U-plane in CUS-Plane specification";
+ }
+
+ leaf coupling-via-frequency-and-time-with-priorities {
+ type boolean;
+ description
+ "Coupling via Frequency and time with priorities; see methods of coupling of C-plane and U-plane in CUS-Plane specification.
+ Note: If coupling-via-frequency-and-time-with-priorities is 'true' then coupling-via-frequency-and-time shall also be 'true'.";
+ }
+
+ leaf coupling-via-frequency-and-time-with-priorities-optimized {
+ type boolean;
+ description
+ "Coupling via Frequency and time with priorities optimised; see methods of coupling of C-plane and U-plane in CUS-Plane specification.
+ Note: If coupling-via-frequency-and-time-with-priorities-optimized is 'true' then coupling-via-frequency-and-time shall also be 'true'.";
+ }
+ }
+
+ leaf ud-comp-len-supported {
+ type boolean;
+ description
+ "This property informs if O-RU supports optional field udCompLen in U-Plane messages.
+ Only in case this leaf is present and its value is TRUE, O-RU supports U-Plane messages
+ containing udCompLen field in section header.";
+ }
+
+ leaf ext-ant-delay-capability {
+ if-feature "or-feat:EXT-ANT-DELAY-CONTROL";
+ type enumeration {
+ enum PER-ARRAY-CARRIER {
+ description
+ "Informs that the O-RU supports the configuration of different t-da-offset on different tx-array-carriers,
+ and different t-au-offset on different rx-array-carriers";
+ }
+
+ enum PER-ARRAY {
+ description
+ "Informs that the O-RU supports the configuration of different t-da-offset on different tx-array-carriers
+ only when those tx-array-carriers belong to different tx-arrays,
+ and the O-RU supports the configuration of different t-au-offset on different rx-array-carriers
+ only when those rx-array-carriers belong to different rx-arrays";
+ }
+
+ enum PER-O-RU {
+ description
+ "Informs that the O-RU only supports the configuration of a common t-da-offset across all tx-array-carriers,
+ and a common t-au-offset across all rx-array-carriers";
+ }
+ }
+ description
+ "This property informs what kind of capability the O-RU supports to be configured with external antenna delay.";
+ }
+
+ leaf nack-supported {
+ type boolean;
+ description
+ "This value indicates if O-RU supports sending NACK feedback if a section extension for ACK/NACK request is received,
+ If O-RU reports supporting section extension for ACK/NACK request (section extension 22) and ACK/NACK feedback (section type 8), ACK feedback shall always be supported,
+ while NACK feedback is optionally supported according to 'nack-supported'";
+ }
+
+ leaf st8-scs-supported {
+ type boolean;
+ description
+ "Informs if O-RU supports the optional field scs in Section Type 8 messages.";
+ }
+
+ container energy-saving-capability-common-info {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "A container with parameters for common energy saving capabilities supported by the O-RU";
+
+
+ leaf st8-ready-message-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports Section Type 8 Ready message.";
+ }
+
+ leaf sleep-duration-extension-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports extension of sleep duration.";
+ }
+
+ leaf emergency-wake-up-command-supported {
+ type boolean;
+ description
+ "Informs if the O-RU supports emergency wake-up M-Plane command.";
+ }
+ }
+
+ leaf bundle-offset-in-se11-supported {
+ type boolean;
+ default false;
+ description
+ "Informs if O-RU supports receiving non-zero values of bundleOffset in SE11.
+ For details, see CUS-Plane Specification, clause 7.7.11.10.";
+ }
+
+ leaf max-beamId-tables-supported {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ description
+ "This parameter defines the maximum number of beamId tables supported by the O-RU.";
+ }
+
+ leaf min-hibernate-time-duration {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ type uint32;
+ units minutes;
+ description
+ "Informs about the minimum hibernate-time duration that O-RU
+ supports deep-hibernate sleep";
+ }
+
+ leaf max-hibernate-time-duration {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Informs about the maximum hibernate-time duration that O-RU supports deep-hibernate sleep";
+ }
+ }
+
+ grouping sub-band-info {
+ description "container for collection of leafs for LAA sub-band 46";
+ list sub-band-frequency-ranges {
+ key sub-band;
+ description "frequency information on a per sub-band basis";
+ leaf sub-band {
+ type sub-band-string;
+ description "Sub band when band 46";
+ }
+ uses sub-band-max-min-ul-dl-frequency;
+ }
+ leaf number-of-laa-scarriers {
+ type uint8;
+ description
+ "This value indicates the number of LAA secondary carriers supported at O-RU.";
+ }
+
+ leaf maximum-laa-buffer-size {
+ type uint16;
+ description
+ "Maximum O-RU buffer size in Kilobytes (KB) per CC. This parameter is
+ needed at the O-DU to know how much data can be sent in advance
+ and stored at the O-RU to address the LBT uncertainty.";
+ }
+
+ leaf maximum-processing-time {
+ type uint16;
+ units microseconds;
+ description
+ "Maximum O-RU Processing time in microseconds at the O-RU to handle the
+ received/transmitted packets from/to the O-DU. This parameter is
+ needed at the O-DU to determine the time when it needs to send
+ the data to the O-RU.";
+ }
+
+ leaf self-configure {
+ type boolean;
+ description "This value indicates that the O-RU can manage the contention window locally. ";
+ }
+ }
+
+ grouping supported-filter-pass-bandwidths {
+ description
+ "Grouping of filter pass bandwidth capabilities";
+
+ list supported-filter-pass-bandwidths {
+ key "id";
+ config false;
+
+ leaf id {
+ type uint32;
+ description
+ "Identification number for a supported filter pass bandwidth.";
+ }
+
+ leaf type {
+ type enumeration {
+ enum LTE {
+ description
+ "LTE technology.";
+ }
+ enum NR {
+ description
+ "NR technology.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS of LTE and NR technologies.";
+ }
+ }
+ description
+ "Supported carrier type for filter pass bandwidth value.";
+ }
+
+ leaf carrier-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Bandwidth of a carrier for which filter pass bandwidth can be used.";
+ }
+
+ leaf filter-pass-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Filter pass bandwidth of a carrier.";
+ }
+
+ description
+ "List of supported filter pass bandwidths by carriers.";
+ }
+ }
+
+ grouping support-for-dl {
+ description
+ "Grouping for DL specific parameters";
+
+ 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-list supported-technology-dl {
+ type enumeration{
+ enum LTE {
+ description "LTE is supported in DL path.";
+ }
+ enum NR {
+ description "NR is supported in DL path.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS is supported in the DL, which implicitly means LTE and NR are also
+ BOTH supported in the DL.";
+ }
+ }
+ min-elements 1;
+ description
+ "This list provides information regarding technologies supported in DL path";
+ }
+
+ container supported-filter-pass-bandwidths-dl {
+ description
+ "Filter pass bandwidth capabilities for DL.";
+ uses supported-filter-pass-bandwidths;
+ }
+
+ leaf-list tx-array-beamId-table-indexes {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ min-elements 1;
+ description
+ "When O-RU advertises support for multiple beamId tables, this list shall specify the beamId table indexes
+ associated with a given tx-array capabilities list entry. O-DU shall be restricted to choose
+ one or multiple entries for a given configured tx-array-carrier from this list.
+ Note: tx-array and rx-array may use the same beamId table indexes.";
+ }
+
+ }
+
+ grouping support-for-ul {
+ description
+ "Grouping for UL specific parameters";
+
+ 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-list supported-technology-ul {
+ type enumeration{
+ enum LTE {
+ description "LTE is supported in UL path.";
+ }
+ enum NR {
+ description "NR is supported in UL path.";
+ }
+ enum DSS_LTE_NR {
+ if-feature DSS_LTE_NR;
+ description
+ "DSS is supported in the UL, which implicitly means LTE and NR are also
+ BOTH supported in the UL.";
+ }
+ }
+ min-elements 1;
+ description
+ "This list provides information regarding technologies supported in UL path";
+ }
+
+ container supported-filter-pass-bandwidths-ul {
+ description
+ "Filter pass bandwidth capabilities for UL.";
+ uses supported-filter-pass-bandwidths;
+ }
+
+ leaf-list rx-array-beamId-table-indexes {
+ if-feature "or-feat:MULTIPLE-BEAMID-TABLES-SUPPORTED";
+ type uint8;
+ min-elements 1;
+ description
+ "When O-RU advertises support for multiple beamId tables, this list shall specify the beamId table indexes
+ associated with a given rx-array capabilities list entry. O-DU shall be restricted to choose
+ one or multiple entries for a given configured rx-array-carrier from this list.
+ Note: tx-array and rx-array may use the same beamId table indexes.";
+ }
+ }
+
+ grouping band-capabilities {
+ description
+ "Capabilities that are needed to be defined per each band";
+
+ leaf band-number {
+ type uint16;
+ description
+ "Band number";
+ }
+
+ container sub-band-info {
+ when "../band-number = '46'";
+ if-feature "o-ran-module-cap:LAA";
+ description "container for collection of leafs for LAA sub-band 46";
+ uses sub-band-info;
+ }
+
+ uses support-for-dl;
+ uses support-for-ul;
+
+ leaf max-num-component-carriers {
+ type uint8;
+ description "maximum number of component carriers supported by the O-RU. This parameter is the
+ cumulative value of 'max-num-carriers-dl' and 'max-num-carriers-ul'";
+ }
+
+ leaf max-num-bands {
+ type uint16;
+ status deprecated;
+ description "maximum number of bands supported by the O-RU.
+ Parameter moved to ru-capabilities, hence deprecated";
+ }
+
+ leaf max-num-sectors {
+ type uint8;
+ description "maximum number of sectors supported by the O-RU";
+ }
+
+ leaf max-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Maximum Power per band per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf min-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ status deprecated;
+ description
+ "This value indicates Minimum Power per band per antenna. Value unit is dBm.
+
+ The parameter is deprecated. min-gain and max-gain define constraints related to
+ TX power budget, as defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ leaf codebook-configuration_ng {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_ng that are used for precoding.
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+
+ leaf codebook-configuration_n1 {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_n1 that are used for precoding
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+
+ leaf codebook-configuration_n2 {
+ type uint8;
+ status deprecated;
+ description
+ "This parameter informs the precoder codebook_n2 that are used for precoding
+ Parameter deprecated since antenna topology already specified in [tr]x-array";
+ }
+ }
+
+ container module-capability {
+
+ description
+ "module capability object responsible for providing module capability.";
+
+ container ru-capabilities {
+ config false;
+ description
+ "Structure representing set of capabilities.";
+
+ uses ru-capabilities;
+ }
+
+ list band-capabilities {
+ key band-number;
+ config false;
+ description
+ "Capabilities that are needed to be defined per each band";
+
+ uses band-capabilities;
+ }
+ container rw-sub-band-info {
+ if-feature "o-ran-module-cap:LAA";
+ description "config true leafrefs for use as constraints for config true leafs";
+ leaf rw-number-of-laa-scarriers {
+ type leafref {
+ path "/module-capability/band-capabilities/sub-band-info/number-of-laa-scarriers";
+ require-instance false;
+ }
+ description
+ "This value indicates the number of LAA secondary carriers supported at O-RU.";
+ }
+ leaf rw-self-configure {
+ type leafref {
+ path "/module-capability/band-capabilities/sub-band-info/self-configure";
+ require-instance false;
+ }
+ description
+ "This value indicates that the O-RU can manage the contention window locally.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-mplane-int {
+ yang-version 1.1;
+ namespace "urn:o-ran:mplane-interfaces:1.0";
+ prefix "o-ran-mplane-int";
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for managing the O-RAN Radio Unit
+ management plane interface.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2021-12-01" {
+ description
+ "version 7.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) new leaf for recommended scan interval ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) new functionality to report TLS information ";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) enabling NETCONF clients to be configured.
+ 2) shifting new container to correct position
+ 3) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ typedef vlan-id {
+ type uint16 {
+ range 1..4094;
+ }
+ description
+ "Type definition representing a single-tagged VLAN";
+ }
+
+ // Groupings
+
+ grouping mplane-group {
+ description "mplane grouping";
+ container searchable-mplane-access-vlans-info {
+ description
+ "These parameters shall be stored by the equipment in reset persistent memory
+ to enable it to be re-used to optimize VLAN discovery procedures.";
+ 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 equipment 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 equipment about lowest VID to be used
+ in VLAN scan procedure";
+ }
+ leaf highest-vlan-id {
+ type vlan-id;
+ description
+ "Value of this parameter informs about highest VID to be used
+ in VLAN scan procedure";
+ }
+ }
+ leaf scan-interval {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The O-RU should repeatedly search using untagged frames and previously configured
+ VLANs whenever it searches across the full range of VLAN IDs.The O-RU controller is
+ able to recommend the maximum interval between repeatedly scanning for M-Plane connectivity
+ on the untagged and configured VLANs using this timer schema node.
+
+ The O-RU shall store this schem-node in reset persistent memory.";
+ }
+ }
+
+ 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]/o-ran-int:vlan-id";
+ }
+ description
+ "vlans used to communicate with management plane servers.";
+ }
+ container client-info {
+ config false;
+ description
+ "the NETCONF client information, discovered by DHCP or manually
+ configured during installation.";
+ 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 O-RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The call home port number discovered or manually configured.";
+ }
+ }
+ 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 O-RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The call home port number discovered or manually configured.";
+ }
+ }
+ 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 "The configured call home server port number";
+ }
+ leaf server-ssh-port {
+ type inet:port-number;
+ default 830;
+ description "The configured SSH server port number";
+ }
+ }
+ container m-plane-tls-ports {
+ description "leafs for managing TLS ports";
+ leaf call-home-tls-port {
+ type inet:port-number;
+ default 4335;
+ description "The configured call home server port number";
+ }
+ leaf server-tls-port {
+ type inet:port-number;
+ default 6513;
+ description "The configured TLS server port number";
+ }
+ }
+ }
+ container configured-client-info {
+ description
+ "the NETCONF client information that may be configured by another
+ NETCONF client. These clients are reported independently from clients
+ manually configured or discovered using DHCP.";
+ 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 configured M-Plane client.";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The configured call home port number.";
+ }
+ }
+ 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 configured M-Plane client..";
+ }
+ leaf port {
+ type inet:port-number;
+ description
+ "The configured call home port number.";
+ }
+ }
+ leaf-list mplane-fqdn {
+ type inet:domain-name;
+ description "The configured FQDN(s) of M-Plane client(s).";
+ }
+ }
+ }
+
+
+ // Top Level Container
+
+ container mplane-info {
+ description "top-level container for management plane information";
+
+ uses mplane-group;
+ }
+}
--- /dev/null
+module o-ran-operations {
+ yang-version 1.1;
+ namespace "urn:o-ran:operations:1.0";
+ prefix "o-ran-ops";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ import ietf-hardware {
+ prefix hw;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG model used for O-RAN operations.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) Support for M-plane based TRX control for Network Energy Saving.
+ 2) Support for deep hibernate sleep mode";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) Introduction of restart-call-home RPC
+ 2) Introduction of emergency-wake-up RPC and Notification";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 10.1.0
+
+ 1) Clarify description of max-call-home-attempts";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added current-datetime leaf";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions
+ 2) new schema node maximum-simultaneous-netconf-sessions";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) new leaf for max-call-home-attempts";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) new descriptions for NETCONF/TLS call home";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added pnfRegistration and VES header version fields";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added timezone-name
+ 2) added ru-instance-id
+ 3) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ typedef timezone-name {
+ type string;
+ description
+ "A time zone name as used by the Time Zone Database,
+ sometimes referred to as the 'Olson Database'.
+
+ The complete set of valid values is defined in
+ https://www.iana.org/time-zones.
+
+ The exact set of supported values is an
+ implementation-specific matter.";
+
+ reference
+ "RFC 6557: Procedures for Maintaining the Time Zone Database
+ IANA Time Zone Database https://www.iana.org/time-zones ";
+ }
+
+ typedef version {
+ type string {
+ pattern '[0-9]+(\.[0-9]+){1,2}';
+ }
+ description
+ "this type definition is used to represent the version of the WG4
+ fronthaul interface.";
+ }
+
+ grouping operational-group {
+ description "operational grouping";
+
+// Container used for WG4 specific declarations
+ container declarations {
+ //FIXME - determine whether it is acceptable to WG4 to change this to a presence
+ //container, where the presence indicates the NETCONF server supports WG4
+ //defined functionality
+ config false;
+ description "WG4 Specific Declarations of supported version of standards";
+
+ leaf ru-instance-id {
+ type string;
+ must "re-match(current(), concat(/hw:hardware/hw:component/hw:mfg-name,
+ '_', /hw:hardware/hw:component/hw:model-name, '_',
+ /hw:hardware/hw:component/hw:serial-num ))";
+ description
+ "a unique instance identifier that may be used to identify a
+ particular hardware instance, e.g., when used performing hierarchical
+ management via the O-DU.";
+ }
+
+ leaf supported-mplane-version {
+ type version;
+ default "1.0.0";
+ description "Parameter provides highest M-Plane specification version device is compliant with.";
+ }
+
+ leaf supported-cusplane-version {
+ type version;
+ default "1.0.0";
+ description "Parameter provides highest CUS-Plane specification version device is compliant with.";
+ }
+
+ list supported-header-mechanism {
+ key protocol;
+ description "list provides information regarding type and version of headers.";
+
+ leaf protocol {
+ type enumeration {
+ enum ECPRI {
+ description
+ "Indicates that an O-RU supports the eCPRI header format
+ for the C/U plane";
+ }
+ enum IEEE-1914-3 {
+ description
+ "Indicates that an O-RU supports the 1914.3 header format
+ for the C/U plane";
+ }
+ }
+ description "Transport protocol type.";
+ }
+
+ leaf ecpri-concatenation-support {
+ when "../protocol = 'ECPRI'";
+ type boolean;
+ default false;
+ description
+ "This leaf is used to indicate whether the O-RU supports the optional
+ eCPRI concatenation capability";
+ }
+
+ leaf protocol-version {
+ type version;
+ default "1.0";
+ description "Header protocol version.";
+ }
+ }
+ leaf supported-common-event-header-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest commonEventheader version device is compliant with.";
+ }
+ leaf supported-ves-event-listener-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest vesEventListener version device is compliant with.";
+ }
+ leaf supported-pnf-registration-fields-version {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ type version;
+ description "Parameter provides highest pnfRegistrationFields version device is compliant with.";
+ }
+ leaf maximum-simultaneous-netconf-sessions {
+ type uint8 {
+ range "2..max";
+ }
+ default 2;
+ description
+ "The maximum number of simultaneous NETCONF sessions able to be supported by the O-RU";
+ }
+ }
+
+ container operational-state {
+ config false;
+ description
+ "Operational state for the O-RAN network element";
+ leaf restart-cause {
+ type enumeration {
+ enum POWER-ON {
+ description
+ "Equipment restarted because it was powered on";
+ }
+ enum SUPERVISION-WATCHDOG {
+ description
+ "Equipment restarted because it's supervision watchdog timer wasn't reset
+ by a NETCONF client (inferring loss of NETCONF connectivity)";
+ }
+ enum MPLANE-TRIGGERED-RESTART {
+ description
+ "Equipment restarted because of an M-plane issued RPC";
+ }
+ enum SOFTWARE-FAILURE {
+ description
+ "Equipment restarted because of software failure";
+ }
+ enum OTHER-WATCHDOG-TIMER {
+ description
+ "Equipment restarted because of some other non NETCONF watchdog timer";
+ }
+ enum DEEP-HIBERNATE-RESTART {
+ description
+ "Equipment restarted after deep-hibernate timer expiry";
+ }
+ enum UNKNOWN {
+ description
+ "The restart reason for the Equipment is unknown";
+ }
+ }
+ description "the cause for the last restart of the O-RAN Network Element";
+ }
+ leaf restart-datetime {
+ type yang:date-and-time;
+ description
+ "The system date and time when the system last restarted.";
+ }
+ leaf current-datetime {
+ type yang:date-and-time;
+ description
+ "An optional leaf to enable the O-RU to report its current system date and time.
+
+ O-RUs that support a realtime clock may use it to set its current-datetime.
+ O-RUs that support GNSS may use GNSS derived time to set its current-datetime.
+ Other O-RUs can set the current-datetime from PTP synchronization.
+
+ An O-RU may omit the leaf if its current-datetime is not set, e.g., using one
+ of the examples listed above.";
+ }
+ }
+
+
+// Common cross-WG container used for configuring clock and call home timers
+ container clock {
+ description
+ "System date and time properties used by all working groups.";
+
+ leaf timezone-name {
+ type timezone-name;
+ description
+ "An optional TZ database name to use for the system,
+ such as 'Europe/Stockholm'
+
+ Time zone name is an informative leaf and is NOT used in the
+ managed element to convert local time zone.
+
+ The managed element may include time zone name in measurement or
+ fault data.";
+ }
+
+ leaf timezone-utc-offset {
+ type int16 {
+ range "-720 .. 840";
+ }
+ units "minutes";
+ default 0;
+ description
+ "The number of minutes to add to UTC time to
+ identify the time zone for this system. For example,
+ 'UTC - 8:00 hours' would be represented as '-480'.";
+ }
+ }
+
+ leaf re-call-home-no-ssh-timer {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "A common timer used by the O-RAN equipment to trigger the repeated call
+ home procedure to all identified call home servers to which the O-RAN
+ equipment has not already an established NETCONF connection.
+
+ Irrespective of the name of the leaf, the timer applies equally to
+ call home procedures using NETCONF/SSH and those using NETCONF/TLS.
+
+ A value of 0 means that the O-RAN equipment shall disable operation
+ of the timer triggered NETCONF call home procedure.";
+ }
+
+ leaf max-call-home-attempts {
+
+ type uint8 {
+ range "0 .. 20";
+ }
+
+ description
+ "Maximum number of times for a O-RU to reattempt call home (repeat Call Home procedures) to each O-RU controller.
+ Please refer to M-plane clause 6.3 and 14.1.1 for detailed information.
+ Note: If this parameter is set with value zero
+ O-RU shall not repeat Call Home procedure to any O-RU controller";
+ }
+
+
+ }
+
+// Top level container
+
+ container operational-info{
+ description
+ "a collection of operational information for the O-RU";
+ uses operational-group;
+
+ }
+
+// RPCs
+
+ rpc reset {
+ 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.";
+
+ }
+
+ rpc restart-call-home {
+ if-feature "or-feat:CALL-HOME-REACTIVATION-SUPPORTED";
+ description
+ "This RPC allows any active 'call home O-RU Controller' having necessary permissions to
+ instruct O-RU to re-activate call home procedures. By acknowledging this RPC the O-RU
+ shall start call home towards all known 'call home O-RU Controllers' who do not have
+ active M-Plane session at the moment.
+ This RPC should not be rejected nor NACKed by the O-RU that supports feature
+ CALL-HOME-REACTIVATION-SUPPORTED";
+ }
+
+ rpc emergency-wake-up {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "M-Plane triggered abort of current sleep mode.
+ A server shall send a notification to the client after wake-up completion.";
+
+ input {
+ leaf-list sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.
+ When present, the wake-up operation is applicable to the resources of each sro-id in the list.
+ When absent, the wake-up operation is applicable to the whole O-RU.";
+ }
+ }
+ output {
+ list operational-status {
+ key index;
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list.";
+ }
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Wake-up operation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Wake-up operation cannot be started because of error.";
+ }
+ }
+ description
+ "Status of the emergency-wake-up operation.
+ When ../sro-id is present, this leaf refers to the status of emergency-wake-up operation for corresponding sro-id's resources.
+ When ../sro-id is absent, this leaf refers to the status of emergency-wake-up operation for the whole O-RU.";
+ }
+
+ description
+ "List of emergency-wake-up operational status";
+ }
+ }
+ }
+
+ rpc deep-hibernate {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ description
+ "M-Plane triggered deep-hibernate sleep mode.";
+
+ input {
+ leaf hibernate-time {
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Time duration for which the O-RU shall be in deep-hibernation.
+ An O-RU shall reject any deep-hibernate RPC where the hibernate-time duration
+ exceeds the value of max-hibernate-time-duration advertised by the O-RU.";
+ }
+ }
+
+ output {
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Deep-hibernate mode activation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Deep-hibernate mode activation cannot be started because of error.";
+ }
+ }
+ description
+ "Status of the deep-hibernate operation.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+ }
+ }
+
+ notification emergency-wake-up-complete {
+ if-feature "or-feat:TRX-CONTROL or or-feat:ADVANCED-SLEEP-MODE";
+ description
+ "M-Plane notification event to notify the completion of emergency wake-up operation.";
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator identity.
+ When present, the notification is applicable for a particular sro-id.
+ When absent, the notification is applicable for the whole O-RU.";
+ }
+ }
+
+ notification deep-hibernate-activated {
+ if-feature "or-feat:DEEP-HIBERNATE";
+ description
+ "M-Plane notification event to notify the activation of deep-hibernate sleep mode in O-RU.";
+ leaf hibernate-time {
+ type uint32;
+ units minutes;
+ mandatory true;
+ description
+ "Time duration for which the O-RU shall be in deep-hibernation.";
+ }
+ }
+}
--- /dev/null
+module o-ran-performance-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:performance-management:1.0";
+ prefix "o-ran-pm";
+
+ import ietf-yang-types {
+ prefix "yang-types";
+ }
+
+ // import identifier for O-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 port-number
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ // import ru-mac-address, o-du-mac-address and vlan-id
+ import o-ran-processing-element {
+ prefix "o-ran-elements";
+ }
+
+ import o-ran-file-management {
+ prefix "o-ran-file-mgmt";
+ }
+
+ import iana-hardware {
+ prefix ianahw;
+ }
+
+ import o-ran-uplane-conf {
+ prefix "up";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration for performance measurement for
+ transceiver and rx-window measurement objects.
+
+ NOTE, whereas this YANG model may define support of schema nodes associated
+ with O-RU measurements as optional, the CU-Plane specification may further
+ specify whether, according to a particular version of the CU plane
+ specification, which specific measurements are mandatory to support
+ from an O-RU perspective. In such a situation, the definition of mandatory
+ performance counters in sub-section 9.1 of the CU-plane specification shall
+ take precedence.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision 2024-08-12 {
+ description
+ "version 16.0.0
+
+ 1) add TSSI measurements.
+ 2) add RSSI measurements.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision 2024-04-15 {
+ description
+ "version 15.0.0
+
+ 1) add fequency bin as optional report for EPE statistics.
+ 2) added new VSWR measurments.
+ 3) new report-info capabilities.
+ 4) remove import by revision date for ietf-yang-types.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision 2023-12-11 {
+ description
+ "version 14.0.0
+
+ 1) Make the leafref refering a measurement-object optional using
+ statement 'require-instance false'.
+ 2) Align YANG model descriptions with schema.
+ 3) Added shared cell performance counters";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision 2023-08-14 {
+ description
+ "version 8.2.0
+
+ 1) EPE measurement report correction.";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2022-08-15 {
+ description
+ "version 8.1.0
+
+ 1) style guide corrections.
+ 2) changed import prefix for o-ran-file-management.";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-12-01 {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) deprecating leaf-list frequency-table and replacing with frequency-bin-table
+ 3) Add support for multiple transport-session-type per O-RU";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-07-26 {
+ description
+ "version 7.0.0
+
+ 1) added new EPE measurements - VOLTAGE and CURRENT
+ 2) added data-direction to rx-window measurements
+ 3) added ability to report multiple measurements in notifications
+ 4) added new symbol TD-RSSI measurements
+ 5) added FTPES file upload support ";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision 2021-03-22 {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision 2020-12-10 {
+ description
+ "version 5.0.0
+
+ 1) container epe-stats is changed deprecated
+ 2) New list epe-statistics and measurement-object is added as key
+ 3) bug fix by pyang --lint";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) updated top-level model description concerning optionality of measurements
+ 2) added new rx window counters
+ 3) added new TX stats measurements
+ 4) added new EPE measurements
+ 5) fixed typo in enumeration - TX_POPWER
+ 6) introduced config false data indicating which type of measurements are supported";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added new measurement objects for QSFP
+ 2) backward compatible changes to correct sFTP Server Authentication.
+ 3) simplifying file management and authentication to reuse from o-ran-file-management module
+ 4) minor fixes according to lack of descriptions and reference
+ 5) added to descriptions to indicate applicability of leafs and Containers
+ to separate O-RAN use cases
+ 6) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ feature GRANULARITY-TRANSPORT-MEASUREMENT {
+ description
+ "This feature indicates that the O-RU supports an optional object-unit TRANSPORT in rx-window-measurement.";
+ }
+
+ feature GRANULARITY-EAXC-ID-MEASUREMENT {
+ description
+ "This feature indicates that the O-RU supports an optional object-unit EAXC_ID in rx-window-measurement.";
+ }
+
+ typedef transceiver-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 that might be supported/configured for
+ transceiver measurement object.";
+ }
+
+ typedef transceiver-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 function that might be supported/configured for
+ transceiver measurement object.";
+ }
+
+ typedef epe-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value 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 that might be supported/configured for
+ EPE measurement object.";
+ }
+
+ typedef symbol-rssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value 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 that might be supported/configured for
+ symbol RSSI measurement object.";
+ }
+
+ typedef tssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description
+ "The reporting info that might be supported/configured for
+ TSSI measurement object.";
+ }
+
+ typedef rssi-report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum AVERAGE {
+ description
+ "to report average value within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description
+ "The reporting info that might be supported/configured for
+ RSSI measurement object.";
+ }
+
+ typedef tx-antenna-report-info {
+ type enumeration {
+ enum AVERAGE {
+ description
+ "To report average value within the measurement-interval
+ for the measurement-object.";
+ }
+ enum STD_DEVIATION {
+ description
+ "To report standard deviation value within the measurement-interval
+ for the measurement-object.";
+ }
+ enum MAXIMUM {
+ description
+ "To report maximum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MAXIMUM_AND_TIME {
+ description
+ "To report maximum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "To report minimum value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM_AND_TIME {
+ description
+ "To report minimum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST {
+ description
+ "To report first value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST_AND_TIME {
+ description
+ "To report first value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST {
+ description
+ "To report latest value within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST_AND_TIME {
+ 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 that might be supported/configured for
+ tx antenna measurement object.";
+ }
+
+ typedef tx-antenna-object-unit {
+ type enumeration {
+ enum ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id - array element";
+ }
+ enum CONNECTOR_BAND {
+ description
+ "Unit to measure the performance per object-id - connector and band";
+ }
+ }
+ description "The object units that might be supported/configured for
+ tx antenna measurement object.";
+ }
+
+ 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 epe-measurement-result-grouping {
+ description
+ "energy, power and environmental measurement-result are listed for O-RU";
+
+ list epe-measurement-result {
+ key "object-unit-id";
+ config false;
+ status deprecated;
+ description
+ "energy power and environmental measurement results
+
+ this list is deprecated as the leaf object-unit-id actually
+ refers to an object-unit. It is replaced with
+ the new list epe-measurement-resultv2";
+ leaf object-unit-id {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:class";
+ }
+
+ description
+ "the hardware component type is used for the object-unit-id for the
+ EPE measurements. For example, the object-unit-id will be set to
+ or-hw:O-RAN-RADIO if the measurement applies to the complete O-RU
+ self-contained sub-system.
+
+ Other hardware-classes include: or-hw:O-RU-POWER-AMPLIFIER,
+ ianahw:power-supply, ianahw:fan, ianahw:cpu";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurement-object";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "maximum value for the measurement-object";
+ }
+ leaf average {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "average value of the measurement-object";
+ }
+ }
+
+ list epe-measurement-resultv2 {
+ key "object-unit-id";
+
+ config false;
+ description
+ "energy power and environmental measurement results
+
+ this list replaces the deprecated list epe-measurement-result";
+ leaf object-unit-id {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the hardware component name is used for the object-unit-id for the
+ EPE measurements. For example, the object-unit-id will be set to
+ the name of the component with class or-hw:O-RU-POWER-AMPLIFIER
+ to refer to a particular power amplifer instance.";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurement-object";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "maximum value for the measurement-object";
+ }
+ leaf average {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ description
+ "average value of the measurement-object";
+ }
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ }
+
+
+ }
+
+ 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/o-ran-int:port-reference/o-ran-int: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 measurement-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 measurement-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;
+ status deprecated;
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-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 results 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 O-RU module or one of its child ports
+ in ietf-hardware/component is used when O-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 O-RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ leaf name{
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats. Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 DU-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 data-direction {
+ type enumeration {
+ enum DL {
+ description
+ "reported measurement refers to control plane messages with dataDirection bit = 1.";
+ }
+ enum UL {
+ description
+ "reported measurement refers to control plane messages with dataDirection bit = 0.";
+ }
+ enum DLUL {
+ description
+ "reported measurement refers to control plane messages irrespective of dataDirection bit setting.";
+ }
+ }
+ description
+ "An optional leaf used when reporting rx window measurement associated with
+ control plane messages. See CUS-Plane Specification for more details of the dataDirection bit.
+
+ When not present and reporting rx window measurement associated with control plane messages,
+ the receiving entity can assume that the reported control plane rx window measurement refers
+ to control plane messages irrespective of dataDirection bit setting.
+
+ Can be ignored when received in rx window measurements not corresponding to control plane messages.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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";
+ }
+ }
+
+ grouping tx-measurement-result-grouping{
+ description
+ "Group of measurement results for tx stats";
+
+ choice object-unit-id {
+ config false;
+ case RU {
+ leaf name{
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the name of O-RU module or one of its child ports
+ in ietf-hardware/component is used when O-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 tx stats per O-RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ leaf name{
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the tx stats.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements
+ when TRANSPORT is selected as object-unit for the tx stats.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the tx stats.";
+ }
+
+ description
+ "the number of data packet are counted for the tx 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 tx stats.
+ EAXC_ID consists of DU-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 tx stats.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-name'";
+ }
+
+ leaf transport-qualified-name {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:additional-transport-session-type-elements[o-ran-elements:transport-session-type = current()/../transport-session-type]/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "the name of ru-elements in o-ran-processing-elements for the
+ transport information corresponding to this eaxc-id.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ description
+ "the number of data packet are counted for the tx stats per EAXC-ID.";
+ }
+ }
+
+ description
+ "measurement-result for the tx stats depends on the
+ configured object-unit, RU, TRANSPORT or EAXC_ID";
+ }
+ }
+
+ grouping shared-cell-measurement-result-grouping {
+ description
+ "Group of measurement results for shared-cell measurements";
+
+ choice object-unit-id {
+ config false;
+ case TRANSPORT{
+ list pe-measured-result {
+ key "processing-elements";
+ description
+ "the measurement results are counted per processing-element.";
+ leaf processing-elements {
+ type leafref {
+ path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
+ }
+ description
+ "Procesing elements are used to count for shared-cell stats,
+ where the processing element name refers to a list entry
+ containing a south-eth-flow container.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+ description
+ "the number of packets are counted for shared-cell stats.";
+ }
+ }
+ description
+ "the number of packets are counted for shared-cell stats per TRANSPORT.";
+ }
+ description
+ "measurement-result for shared-cell stats depnds on the configured object-unit,
+ TRANSPORT or other one for the future purpose.";
+ }
+ }
+
+ grouping symbol-rssi-measurement-result-grouping {
+
+ description
+ "symbol-rssi-measurement-result is the time domain RSSI per symbol,
+ the reference point for the TD-RSSI shall be the antenna connector of the O-RU.
+ The value of Received Signal Strength Indicator(RSSI) per rx-array-carrier per configured OFDM symbol is measured.
+ the RSSI shall be calculated as the linear average of the total received power observed in the configured
+ OFDM symbol in the measurement bandwidth from all sources including co-channel serving and non-serving cells,
+ adjacent channel interference, thermal noise etc., over the total number of antenna elements of the array.
+ The unit of the reported RSSI is dBm.
+ If analogue or hybrid beamforming is enabled, the beamId used for RSSI measurement is:
+ - When there is allocation of a beamId in this symbol, O-RU use that beamId for RSSI measurement;
+ - When there is no allocation of a beamId in this symbol, it is up to O-RU implementation, for example,
+ the O-RU can choose to use a common beamId or use a previous allocated beamId";
+
+ list symbol-rssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+
+ description
+ "rx-array-carrier is used for the object-unit-id for the
+ symbol-rssi-measurement-result, for which object-unit is RX-ARRAY-CARRIER only.
+ this measurement is only supported by the rx-array-carriers which are configured with single numerology.
+ an O-RU shall reject any configuration for an object-unit-id that references a mixed numerology array carrier.";
+ }
+
+ list per-symbol-index-result {
+ key "symbol-index";
+ description
+ "the symbol index for the measurement result";
+
+ leaf symbol-index{
+ type uint16;
+
+ description
+ "symbol-index is the symbol indexes within a configured 'period', These symbols include
+ - all UL symbols within a configured number of slots if measurement-object is ALL-UL-SYMBOLS,
+ and the UL symbols are decided by 'configurable-tdd-pattern', 'static-srs-configuration', 'static-prach-configuration',
+ and 'dataDirection' in the C-plane messages.
+ - configured symbols by 'symbol-index' within a configured 'period' if measurement-object is CONFIGURED-SYMBOLS,
+ If a c-plane message indicates a symbol within the 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure RSSI on this symbol";
+ }
+
+ container min {
+ description
+ "minimum value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "minimum value for the TD-RSSI measurement in dBm";
+ }
+ }
+
+ container max {
+ description
+ "maximum value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "maximum value for the TD-RSSI measurement in dBm";
+ }
+ }
+
+ container avg {
+ description
+ "average value for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "the dBm value of the linear average of TD-RSSI [Watt] value across the symbols with same symbol-index
+ if same symbol-index occurs multiple times within a given measurement interval.";
+ }
+ }
+
+ leaf-list frequency-table {
+ type uint32;
+ status deprecated;
+ 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";
+ }
+
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+ }
+ description
+ "measurement-result for the symbol-wise TD-RSSI depends on the
+ configured object-unit, RX-ARRAY-CARRIER";
+ }
+ }
+
+ grouping tssi-measurement-result-grouping {
+ description
+ "The status information are listed for each O-RU's Tx array carrier";
+ list tssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ description
+ "Measurement result of tssi per measurement-object";
+
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-array-carriers/up:name";
+ }
+ description
+ "tx-array-carrier is used for the object-unit-id for the tssi-measurement-result.";
+ }
+
+ list per-tx-array-element-index-result {
+ key "tx-array tx-array-element";
+ description
+ "This list indicates the status information related to the Tx array element supported by the O-RU array carrier.";
+
+ leaf tx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-arrays/up:name";
+ }
+ description "Name of tx-array; part of the measurement object identifier.";
+ }
+
+ leaf tx-array-element {
+ type uint32;
+ description
+ "This leaf indicates the identifier of the configured Tx array element in tx-array.";
+ }
+
+ container avg {
+ description
+ "average value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "the dBFS value of the linear average of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element";
+ }
+ }
+
+ container min {
+ description
+ "minimum value for the measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "Min value of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element.";
+ }
+ }
+
+ container max {
+ description
+ "maximum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ units dBFS;
+ description
+ "Max value of the measured Transmission Signal Strength Indicator (TSSI) during DL symbol
+ as the digital IQ power level of the Tx array carrier on the specific array element.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping rssi-measurement-result-grouping {
+ description
+ "The status information are listed for each O-RU's Rx array carrier";
+ list rssi-measurement-result {
+ key "object-unit-id";
+ config false;
+ description
+ "Measurement result of rssi per measurement-object";
+ leaf object-unit-id {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+ description
+ "rx-array-carrier is used for the object-unit-id for the rssi-measurement-result.";
+ }
+ list per-rx-array-element-index-result {
+ key "rx-array rx-array-element";
+ description
+ "This list indicates the status information related to the Rx carriers supported by the O-RU array element.";
+ leaf rx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-arrays/up:name";
+ }
+ description "Name of rx-array; part of the measurement object identifier.";
+ }
+ leaf rx-array-element {
+ type uint32;
+ description
+ "This leaf indicates the identifier of the configured Rx array element.";
+ }
+ container avg {
+ description
+ "average value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ container min {
+ description
+ "minimum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ container max {
+ description
+ "maximum value for the measurement-object";
+ leaf value {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "This leaf indicates the measured RSSI (Received Signal Strength Indicator) of the Rx array carrier on the speific antenna path in decibel-milliwatts (dBm).";
+ }
+ }
+ }
+ }
+ }
+
+ grouping tx-antenna-measurement-result-grouping {
+ description
+ "tx-antenna-measurement-result listed per array element or connector and band.";
+
+ grouping tx-antenna-measurement-values-grouping {
+ description
+ "The grouping of tx antenna measurement values";
+
+ container avg {
+ description
+ "Average value is included for the measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Latest value of the measurement-object.";
+ }
+ }
+ container std-deviation {
+ description
+ "Standard deviation value is included for the measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Standard deviation value of the measurement-object.";
+ }
+ }
+ container min {
+ description
+ "Minimum value with optionally recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Minimum value for the measurement-object is provided
+ if MINIMUM or MINIMUM_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the minimum value is provided
+ if MINIMUM_AND_TIME report-info is selected.";
+ }
+ }
+ container max {
+ description
+ "Maximum value with optionally recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Maximum value for the measurement-object is provided
+ if MAXIMUM or MAXIMUM_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the maximum value is provided
+ if MAXIMUM_AND_TIME report-info is selected.";
+ }
+ }
+ container first {
+ description
+ "First value with optinally the recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "First value of the measurement-object is provided
+ if FIRST or FIRST_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the first value is provided
+ if FIRST_AND_TIME report-info is selected.";
+ }
+ }
+ container latest {
+ description
+ "Latest value with optionally the recorded time are included for the
+ measurement-object.";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "Latest value of the measurement-object is provided
+ if LATEST or LATEST_AND_TIME report-info is selected.";
+ }
+
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "Recorded time for the latest value is provided
+ if LATEST_AND_TIME report-info is selected.";
+ }
+ }
+
+ list frequency-bin-table {
+ key bin-id;
+ leaf bin-id {
+ type uint32;
+ description "Sequence number of the bin";
+ }
+ leaf value {
+ type uint32;
+ description "count corresponding to the bin";
+ }
+ description
+ "Frequency-table for the measurement-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound.";
+ }
+ }
+
+ choice object-unit-id {
+ config false;
+ case ARRAY_ELEMENT {
+ list tx-antenna-measurement-result-array-element {
+ key "tx-array tx-array-element";
+ config false;
+ leaf tx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-arrays/up:name";
+ }
+ description "Name of tx-array; part of the measurement object identifier.";
+ }
+
+ leaf tx-array-element {
+ type uint32;
+
+ description
+ "Array element number within the tx-array identified by object-unit-id-array; part of the measurement object identifier.
+ Allowed values and semantic - as per CUS-Plane spec, clause 'Identification and Ordering of Array Elements'.";
+ }
+
+ uses tx-antenna-measurement-values-grouping;
+
+ description
+ "List of tx antenna measurement results";
+ }
+ }
+ case CONNECTOR_BAND {
+ list tx-antenna-measurement-result-connector-band {
+ key "related-o-ru-connector band-number";
+ config false;
+
+ leaf related-o-ru-connector {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-FEEDER')";
+ description
+ "Provides information about O-RU connector related to the measurement.";
+ }
+
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "Provides information about frequency band related to the measurement.";
+ }
+ uses tx-antenna-measurement-values-grouping;
+
+ description
+ "List of tx antenna measurement results";
+ }
+ }
+ description
+ "measurement-result for tx-antenna stats depends on the configured object-unit,
+ ARRAY_ELEMENT or CONNECTOR_BAND.";
+ }
+ }
+
+ grouping measurement-group {
+ description
+ "Group of measurement results";
+
+ uses measurement-capabilities;
+ leaf enable-SFTP-upload {
+ type boolean;
+ default false;
+ status deprecated;
+ description
+ "Flag to enable upload of performance measurement result files.";
+ }
+
+ leaf enable-file-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files.
+ A single schema node is used to enable/disable file uploads
+ over either SFTP or FTPES with the format of the upload
+ path being used to signal which protocol to use.
+
+ An O-RU receiving this schema node should ignore the deprecated
+ enable-SFTP-upload schema node, if received.";
+ }
+
+ 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;
+ status deprecated;
+ 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 be uploaded.
+ The following format is possible:
+ sftp://<username>@<host>[:<port>]/path";
+ }
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+ list remote-file-uploads {
+ key remote-file-upload-path;
+ description
+ "file upload can be done to one or more than one file servers
+
+ An O-RU receiving this list should ignore the deprecated
+ remote-SFTP-uploads list, if received";
+
+ leaf remote-file-upload-path {
+ type inet:uri;
+ description
+ "URI specifying the remote location where the files are to be uploaded.
+
+ When upload is via SFTP, the format shall be of the form
+ sftp://<username>@<host>[:port]/path
+ When upload is via FTPES, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES";
+ }
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+// transceiver measurements applicable to all O-RAN HW functions
+
+ leaf transceiver-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the performance of transceiver
+ measurement objects periodically.";
+ }
+
+// EPE measurements applicable to all O-RAN HW functions
+
+ leaf epe-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the energy, power and environmental
+ measurement objects periodically.";
+ }
+
+// RX Window measurements applicable to O-RAN WG4 defined functions
+
+ leaf rx-window-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the performance of reception
+ window measurement objects periodically.";
+ }
+
+ leaf tx-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the tx (outbound)
+ window measurement objects periodically.";
+ }
+
+ leaf shared-cell-measurement-interval {
+ if-feature feat:SHARED-CELL-STATS;
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the shared-cell measurement objects periodically.";
+ }
+
+ leaf symbol-rssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "measurement interval to measure the symbol-wise TD-RSSI measurement objects periodically.";
+ }
+
+ leaf tssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the tx TSSI measurement objects periodically.";
+ }
+
+ leaf rssi-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the RSSI measurement objects periodically.";
+ }
+
+ leaf tx-antenna-measurement-interval {
+ type uint16;
+ units seconds;
+ description
+ "Measurement interval to measure the tx antenna measurement objects periodically.";
+ }
+
+ leaf notification-interval {
+ type uint16;
+ units seconds;
+ description
+ "notification interval for the measurement result to be notified
+ periodically.";
+ }
+
+ leaf file-upload-interval {
+ type uint16;
+ units seconds;
+ description
+ "file upload interval for the measurement result file to be
+ uploaded periodically.";
+ }
+
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ status deprecated;
+ description
+ "indicates the maximum value of configurable bin-count for frequency
+ table in transceiver-measurement-objects as one of module
+ capabilities.
+
+ This leaf is deprecated and replaced with the max-bin-count in the
+ transceiver-objects list.";
+ }
+
+ list transceiver-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report transceiver measurements
+ applicable to any O-RAN defined hardware function";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_POWER {
+ description
+ "Measured Rx input power in mW for SFP or lane 1 of QSFP";
+ }
+ enum RX_POWER_LANE_2 {
+ description
+ "Measured Rx input power in mW for lane 2 of QSFP";
+ }
+ enum RX_POWER_LANE_3 {
+ description
+ "Measured Rx input power in mW for lane 3 of QSFP";
+ }
+ enum RX_POWER_LANE_4 {
+ description
+ "Measured Rx input power in mW for lane 4 of QSFP";
+ }
+ enum TX_POPWER {
+ status deprecated;
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_POWER {
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_POWER_LANE_2 {
+ description
+ "Measured Tx input power in mW for lane 2 of QSFP";
+ }
+ enum TX_POWER_LANE_3 {
+ description
+ "Measured Tx input power in mW for lane 3 of QSFP";
+ }
+ enum TX_POWER_LANE_4 {
+ description
+ "Measured Tx input power in mW for lane 4 of QSFP";
+ }
+ enum TX_BIAS_COUNT {
+ description
+ "Internally measured Tx Bias Current in mA for SFP or lane 1 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_2 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 2 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_3 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 3 of QSFP";
+ }
+ enum TX_BIAS_COUNT_LANE_4 {
+ description
+ "Internally measured Tx Bias Current in mA for lane 4 of QSFP";
+ }
+ 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 transceiver-report-info;
+ 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 transceiver-function;
+
+ description
+ "the value to be recorded for transceiver-measurement
+ by real value or log 10.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ 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;
+// configuration and measurement result for the transceiver-measurement
+
+ }
+
+ list rx-window-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report RX Window measurements
+ applicable to O-RAN WG4 define O-RU functions";
+ 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 {
+ status deprecated;
+ 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 packets (data and control) within the measurement period.";
+ }
+ enum RX_ON_TIME_C {
+ description
+ "the number of control packets, received on time within
+ the reception window.";
+ }
+ enum RX_EARLY_C {
+ description
+ "the number of control packets, received before
+ the reception window.";
+ }
+ enum RX_LATE_C {
+ description
+ "the number of control packets, received after
+ the reception window.";
+ }
+ enum RX_SEQID_ERR {
+ description
+ "the number of data packets, received with an erroneous sequence ID.";
+ }
+ enum RX_SEQID_ERR_C {
+ description
+ "the number of control packets, received with an erroneous sequence ID.";
+ }
+ enum RX_ERR_DROP {
+ description
+ "The total number of inbound messages which are discarded by the receiving
+ O-RAN entity for any reason.";
+ }
+ }
+ 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 hardware component.
+ This may be the parent 'module' or child 'port' component.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the reception window stats are counted per transport flow.
+ When there are multiple transport flows between O-DU and O-RU,
+ e.g. multiple sets of o-du-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 O-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 received data packet.
+ This configuration is allowed only when O-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;
+// configuration and measurement result for the reception window stats
+
+ }
+
+
+ list tx-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report TX measurements
+ applicable to O-RAN WG4 define O-RU functions";
+ leaf measurement-object {
+ type enumeration {
+ enum TX_TOTAL {
+ description
+ "the number of outbound packets (data and control), transmitted within
+ the measurement period";
+ }
+ enum TX_TOTAL_C {
+ description
+ "the number of outbound control packets, transmitted within
+ the measurement period.
+ This counter is required only if RU supports LAA/LBT capabilities.";
+ }
+ }
+ description
+ "CU-plane transmission counters";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the measurement per measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RU {
+ description
+ "the transmission stats are counted per hardware component.
+ This may be the parent 'module' or child 'port' component.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the transmission stats are counted per transport flow.
+ When there are multiple transport flows between O-DU and O-RU,
+ e.g. multiple sets of o-du-mac-address, ru-mac-address and
+ vlan-id, the transmission stats per transport flow
+ are counted in this case.
+ This configuration is allowed only when O-RU supports
+ a feature GRANULARITY-TRANSPORT-MEASUREMENT.";
+ }
+ enum EAXC_ID {
+ if-feature GRANULARITY-EAXC-ID-MEASUREMENT;
+
+ description
+ "the transmission stats are counted per eAxC ID, which is
+ used in the header of received data packet.
+ This configuration is allowed only when O-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 tx-measurement-result-grouping;
+ // configuration and measurement result for the tx stats
+
+ }
+
+ list shared-cell-measurement-objects {
+ if-feature feat:SHARED-CELL-STATS;
+ key "measurement-object";
+ description
+ "optional list used to report shared-cell measurements.";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_UP_UL {
+ description
+ "the number of received U-Plane data packets in UL direction, corresponds to shared-cell-combine-entity.
+ Refer to WG4 CUS secification clause 9.1.";
+ }
+ enum RX_UP_UL_COMBINED {
+ description
+ "the number of U-Plane data packets, which is processed by combine functional block.
+ Refer to WG4 CUS secification clause 9.1.";
+ }
+ }
+ description
+ "target metric to measure shared-cell operation.";
+ }
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per port
+ measurement object.";
+ }
+ leaf object-unit {
+ type enumeration {
+ enum TRANSPORT {
+ description
+ "unit to measure the performance per object-id,
+ the shared-cell stats are counted per TRANSPORT.";
+ }
+ }
+ 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 shared-cell stats.";
+ }
+ }
+ description
+ "The reporting info to the measurement object.";
+ }
+ uses shared-cell-measurement-result-grouping;
+// configuration and measurement result for the shared-cell stats
+ }
+
+ list epe-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to report energy, power and environmental
+ measurements applicable to any O-RAN defined hardware function";
+ leaf measurement-object {
+ type enumeration {
+ enum TEMPERATURE {
+ description
+ "Measured temperature in degrees Celsius";
+ }
+ enum POWER {
+ description
+ "Measured power consumed, in watts (W)";
+ }
+ enum VOLTAGE {
+ description
+ "Measured voltage, in volts (V)";
+ }
+ enum CURRENT {
+ description
+ "Measured current consumption, in amperes (A)";
+ }
+ }
+ description "Target metric to measure the performance";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf object-unit {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:class";
+ }
+ description
+ "the hardware component type is used for the object-unit for the
+ EPE measurements. For example, the object-unit will be set to
+ or-hw:O-RU-POWER-AMPLIFIER if the measurement relates to
+ O-RU power amplifiers.
+
+ Other hardware-classes include:
+ ianahw:power-supply, ianahw:fan, ianahw:cpu";
+ }
+
+ leaf-list report-info {
+ type epe-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf bin-count {
+ type uint16;
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+ 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 epe-measurement-result-grouping;
+ // configuration and measurement result for the epe-measurement
+
+ }
+
+ list symbol-rssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report symbol-wise time domain RSSI for all UL symbols or configured symbols";
+
+ leaf measurement-object {
+ type enumeration {
+ enum ALL-UL-SYMBOLS {
+ description
+ "Measure and report symbol-rssi separately for all UL symbols in every configured number of slots (as defined by 'period' in 'symbol-rssi-measurement-objects'.
+ And the UL symbols are decided by 'configurable-tdd-pattern', 'static-srs-configuration', 'static-prach-configuration',
+ and 'dataDirection' in the C-plane messages.
+ This option is recommended for static TDD case. If this option is used in dynamic TDD case, then O-RU measures
+ only the allocates UL symbols because O-RU may not know 'candidate UL symbols' which are not allocated. ";
+ }
+
+ enum CONFIGURED-SYMBOLS {
+ description
+ "Measure and report symbol-rssi separately for all configured symbols as defined by the leaf-list 'symbol-index',
+ This can be used for non-dynamic TDD as well as dynamic TDD cases,
+ the O-RU should measure all configured symbols, irrespective of whether the UL symbol is allocated or not,
+ If a c-plane message indicates a symbol within this 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure RSSI on this symbol.";
+ }
+ }
+ description "Target metric to measure the symbol-rssi";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RX-ARRAY-CARRIER {
+ description
+ "unit to measure the performance per object-id,
+ only the rx-array-carriers which are not configured with mixed numerology will be measured";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ list per-rx-array-carrier-configuration {
+ key "rx-array-carrier";
+ description
+ "measurement configuration per rx-array-carrier to accommodate different Subcarrier Spacing
+ and TDD pattern per rx-array-carrier, and only the symbol-wise TD-RSSI of the rx-array-carriers
+ included in per-rx-array-carrier-configuration will be measured and reported";
+
+ leaf rx-array-carrier {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-array-carriers/up:name";
+ }
+ description "reference to the name of rx-array-carriers";
+ }
+
+ leaf period {
+ type uint16;
+
+ description
+ "the number of slots that correspond to the period of a TDD-Configuration,
+ and the start point of the 1st period is subframe#0, slot#0 of the 1st even number radio frame after this configuration is received,
+ here even number radio frame is used because according to 3GPP TS 38.213, A UE expects that P1 + P2 divides 20 msec";
+ }
+
+ leaf-list symbol-index {
+ type uint16;
+
+ description
+ "the index of the symbols within 'period'. The first symbol within the 'period is symbol-index=0, next symbol is symbol-index =1 etc.
+ This symbol-index is different from how symbolId is defined in CUS plane spec.
+ These symbols are configured for O-RU to measure and report symbol-wise rssi,
+ used only when 'measurement-object' = 'CONFIGURED-SYMBOLS'.
+ If a c-plane message indicates a symbol within this 'symbol-index' list to be a DL symbol,
+ O-RU shall not measure rssi on this symbol";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the symbol-rssi measurement per Object";
+ }
+
+ leaf-list report-info {
+ type symbol-rssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "the number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ leaf lower-bound {
+ type int16;
+ units dBm;
+ description
+ "the lower value of the first bin of frequency table.";
+ }
+
+ leaf upper-bound {
+ type int16;
+ units dBm;
+ description
+ "the upper value of the last bin of frequency table.";
+ }
+ }
+
+ uses symbol-rssi-measurement-result-grouping;
+ // configuration and measurement result for the symbol-rssi-measurement
+ }
+
+ list tssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report time domain TSSI for per tx-array-carrier on specific tx-array-element.";
+ leaf measurement-object {
+ type enumeration {
+ enum TSSI-IQ-POWER-LEVEL {
+ description
+ "Measured TSSI (Transmit Signal Strength Indicator) digital IQ Power level for each Tx array carrier on the specific array element";
+ }
+ }
+ description "Target metric to measure the tssi";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the TSSI measurement per object";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum CARRIER_ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id.";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ leaf-list report-info {
+ type tssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+ uses tssi-measurement-result-grouping;
+ // configuration and measurement result for the tssi-measurement
+ }
+
+ list rssi-measurement-objects {
+ key "measurement-object";
+ description
+ "optional list used to measure and report time domain RSSI for per rx-array-carrier on specific rx-array-element.";
+ leaf measurement-object {
+ type enumeration {
+ enum RSSI {
+ description
+ "Measured RSSI (Received Signal Strength Indicator) for each Rx array carrier on the specific array element in dbm";
+ }
+ }
+ description "Target metric to measure the rssi";
+ }
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the RSSI measurement per object";
+ }
+ leaf object-unit {
+ type enumeration {
+ enum CARRIER_ARRAY_ELEMENT {
+ description
+ "Unit to measure the performance per object-id.";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+ leaf-list report-info {
+ type rssi-report-info;
+ description "The reporting info to the measurement object.";
+ }
+ uses rssi-measurement-result-grouping;
+ // configuration and measurement result for the rssi-measurement
+ }
+
+ list tx-antenna-measurement-objects {
+ key "measurement-object";
+ description
+ "Optional list used to report tx-antenna measurements.";
+ leaf measurement-object {
+ type enumeration {
+ enum VSWR {
+ description
+ "Measure and report values of VSWR.";
+ }
+ }
+ description "Target metric to measure the tx-antenna measurements.";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf-list report-info {
+ type tx-antenna-report-info;
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf object-unit {
+ type tx-antenna-object-unit;
+ mandatory true;
+ description "Unit to measure the performance per object-id.";
+ }
+
+ leaf bin-count {
+ type uint16;
+
+ description
+ "The number of bin for the frequency table.
+ This value shall be less than max-bin-count";
+ }
+
+ 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 tx-antenna-measurement-result-grouping;
+// configuration and measurement result for the tx-antenna-measurement
+
+ }
+
+ }
+
+ grouping measurement-capabilities {
+ description "a measurement capabilities grouping";
+ container measurement-capabilitites {
+ config false;
+ description "the type of measurement objects supported by the O-RU";
+
+ list transceiver-objects {
+ key measurement-object;
+ description "list of transceiver objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/transceiver-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type transceiver-report-info;
+ description "The reporting info supported by this measurement object.";
+ }
+ leaf-list function {
+ type transceiver-function;
+ description "The function supported by this measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in transceiver-measurement-objects.";
+ }
+ }
+ list rx-window-objects {
+ key measurement-object;
+ description "list of rx window objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rx-window-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list tx-stats-objects {
+ key measurement-object;
+ description "list of tx stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list shared-cell-stats-objects {
+ if-feature feat:SHARED-CELL-STATS;
+ key measurement-object;
+ description "list of shared-cell stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/shared-cell-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ }
+ list epe-stats-objects {
+ key "measurement-object";
+ description
+ "An optional list describing the energy, power and environmental measurements supported
+ by the O-RU. Measurements are defined per hardware component.";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/epe-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list component-class {
+ type identityref {
+ base ianahw:hardware-class;
+ }
+ description
+ "An indication of the general hardware type of the
+ component for which EPE measurements are supported.";
+
+ }
+ leaf-list report-info {
+ type epe-report-info;
+ description "The reporting info supported of this measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in epe-measurement-objects.";
+ }
+ }
+
+ list symbol-rssi-stats-objects {
+ key measurement-object;
+ description "list of symbol-wise TD-RSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/symbol-rssi-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type symbol-rssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in symbol-rssi-stats-objects.";
+ }
+ }
+
+ list tssi-stats-objects {
+ key measurement-object;
+ description "list of TSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tssi-measurement-objects/measurement-object";
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type tssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ }
+
+ list rssi-stats-objects {
+ key measurement-object;
+ description "list of RSSI stats objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rssi-measurement-objects/measurement-object";
+ }
+ description "a measurement object";
+ }
+ leaf-list report-info {
+ type rssi-report-info;
+ description "The reporting info supported for thise measurement object.";
+ }
+ }
+
+ list tx-antenna-stats-objects {
+ key measurement-object;
+ description "list of tx antenna objects";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-antenna-measurement-objects/measurement-object";
+ require-instance false;
+ }
+ description "a measurement object";
+ }
+
+ leaf-list object-unit {
+ type tx-antenna-object-unit;
+ description "The object units supported for this measurement object.";
+ }
+
+ leaf-list report-info {
+ type tx-antenna-report-info;
+ description "The reporting info supported for this measurement object.";
+ }
+
+ leaf max-bin-count{
+ type uint16;
+ config false;
+ description
+ "when O-RU supports FREQUENCY_TABLE, indicates the maximum value of
+ configurable bin-count for frequency table in tx-antenna-stats-objects.";
+ }
+ }
+ }
+ }
+
+ grouping measurement-notification {
+
+ description
+ "notification may contain measurement result for transceiver-stats
+ and/or rx-window-stats and/or tx-stats and/or epe-stats";
+ list transceiver-stats {
+ key "measurement-object";
+
+ description
+ "measurement result of transceiver-measurement per 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;
+
+ list multiple-transceiver-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of transceiver-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use the
+
+ measurement-result-stats/transceiver-stats[measurement-object]/transceiver-measurement-result
+
+ schema-node to report a single transceiver measurement-object. The O-RU should report its latest
+ transceiver measurements available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses transceiver-measurement-result-grouping;
+ }
+
+ }
+
+ list rx-window-stats {
+ key "measurement-object";
+
+ description
+ "measurement result for the reception window measurement per
+ 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;
+
+ list multiple-rx-window-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of rx-window-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/rx-window-stats[measurement-object]/count or
+ measurement-result-stats/rx-window-stats[measurement-object]/tr-measured-result/count or
+ measurement-result-stats/rx-window-stats[measurement-object]/eaxc-measured-result/count
+
+ schema-nodes to report a single rx-window measurement-object. The O-RU should report its latest
+ rx-window measurement available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses rx-window-measurement-result-grouping;
+ }
+
+ }
+
+ list tx-stats {
+ key "measurement-object";
+
+ description
+ "measurement result for the tx stats measurement per
+ measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the tx stats measurement";
+ }
+ uses start-and-end-time;
+ uses tx-measurement-result-grouping;
+
+ list multiple-tx-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tx-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/tx-stats[measurement-object]/count or
+ measurement-result-stats/tx-stats[measurement-object]/tr-measured-result/count or
+ measurement-result-stats/tx-stats[measurement-object]/eaxc-measured-result/count
+
+ schema-nodes to report a single tx-measurement. The O-RU should report its latest
+ tx-measurement available. This ensures O-DUs supporting earlier versions
+ of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses tx-measurement-result-grouping;
+ }
+
+ }
+
+ list shared-cell-stats {
+ if-feature feat:SHARED-CELL-STATS;
+ key "measurement-object";
+
+ description
+ "measurement result for the shared-cell measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/shared-cell-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the shared-cell measurement";
+ }
+
+ list multiple-shared-cell-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of shared-cell-measurement.";
+
+ uses start-and-end-time;
+ uses shared-cell-measurement-result-grouping;
+
+ }
+ }
+
+ container epe-stats {
+ status deprecated;
+ description
+ "container for the EPE stats measurement - deprecated because measurement object
+ isn't included";
+
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+
+
+ }
+
+ list epe-statistics {
+ key "measurement-object";
+
+ description
+ "measurement result for the EPE stats measurement per
+ measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/epe-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the EPE stats measurement";
+ }
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+
+ list multiple-epe-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of epe-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall use the
+
+ measurement-result-stats/epe-statistics[measurement-object]/epe-measurement-resultv2/
+
+ schema-nodes to report a single epe-measurement for a measurement-object. The O-RU
+ should report its latest epe-measurement available. This ensures O-DUs supporting earlier
+ versions of this specification can recover the measurement.";
+
+ uses start-and-end-time;
+ uses epe-measurement-result-grouping;
+ }
+
+ }
+
+ list symbol-rssi-stats {
+ key "measurement-object";
+
+ description
+ "measurement result of symbol-rssi-measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/symbol-rssi-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the symbol-rssi-measurement";
+ }
+
+ uses start-and-end-time;
+ uses symbol-rssi-measurement-result-grouping;
+
+ list multiple-symbol-rssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of symbol-rssi-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.
+
+ In addition, the O-RU shall always use one of the
+
+ measurement-result-stats/symbol-rssi-stats[measurement-object]/
+
+ schema-nodes to report a single symbol-rssi measurement for a measurement-object.
+ The O-RU should report its latest symbol-rssi measurement available.";
+
+ uses start-and-end-time;
+ uses symbol-rssi-measurement-result-grouping;
+ }
+ }
+
+ list tssi-stats {
+ key "measurement-object";
+ description
+ "Measurement result of tssi per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tssi-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the tx-array-carriers";
+ }
+
+ list tssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tssi-measurement.
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+ uses start-and-end-time;
+ uses tssi-measurement-result-grouping;
+ }
+ }
+
+ list rssi-stats {
+ key "measurement-object";
+ description
+ "Measurement result of rssi per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rssi-measurement-objects/measurement-object";
+ }
+ description
+ "measurement-object for the rx-array-carrier";
+ }
+ list rssi-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of rssi-measurement.
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+ uses start-and-end-time;
+ uses rssi-measurement-result-grouping;
+ }
+ }
+
+ list tx-antenna-stats {
+ key "measurement-object";
+
+ description
+ "Measurement result of tx-antenna-measurement per measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/tx-antenna-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the tx-antenna-measurement";
+ }
+
+ list tx-antenna-measurement-result {
+ config false;
+ description
+ "Multiple measurement results of tx-antenna-measurement.
+
+ The O-RU shall use this list to report one or more measurements per measurement-object in a single notification.";
+
+ uses start-and-end-time;
+ uses tx-antenna-measurement-result-grouping;
+ }
+
+ }
+
+ }
+
+ // Top level container
+
+ container performance-measurement-objects {
+ description
+ "configuration for performance management and measurement-result are
+ included";
+ uses measurement-group;
+ }
+
+// Notifications
+
+ notification measurement-result-stats {
+ description
+ "Notification may contain measurement results for transceiver-stats
+ and/or rx-window-stats";
+ uses measurement-notification;
+ }
+}
--- /dev/null
+module o-ran-processing-element {
+ yang-version 1.1;
+ namespace "urn:o-ran:processing-element:1.0";
+ prefix "o-ran-elements";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-ip {
+ prefix "ip";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.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 address + VLAN-ID based mapping
+ iii) UDP/IP based mapping
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introducing SHARED-ORU-MULTI-OPERATOR feature
+ 2) fixing constraints";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Add support for multiple transport-session-type per O-RU";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added new enum SHARED-CELL-ETH-INTERFACE in
+ transport-session-type and new containers north-eth-flow and
+ south-eth-flow to enable Shared cell scenario.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new leaf to enable O-RU to report the maximum number of
+ transport flows it can support, e.g., due to restrictions on number
+ of VLAN-IDs when Ethernet type transport is used.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature SHARED_CELL {
+ description
+ "Presence of feature indicates that this O-RU is capable to support
+ shared cell.";
+ }
+// groupings
+
+ grouping non-shared-cell-flow-group {
+ description "a grouping for non-shared cell O-RU flows";
+
+ container aliasmac-flow {
+ when "../../../transport-session-type = 'ALIASMAC-INTERFACE'";
+ if-feature o-ran-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]/o-ran-int:alias-macs";
+ }
+ mandatory true;
+ description
+ "O-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]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for alias MAC based flow";
+ }
+ leaf o-du-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "O-DU's MAC address used for alias MAC based flow";
+ }
+ }
+ container eth-flow {
+ when "../../../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]/o-ran-int:mac-address";
+ }
+ mandatory true;
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ mandatory true;
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf o-du-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "O-DU's MAC address used for Ethernet based flow";
+ }
+ }
+ container udpip-flow {
+ when "../../../transport-session-type = 'UDPIP-INTERFACE'";
+ 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 "O-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 "O-RU's IPv6 address";
+ }
+ mandatory true;
+ description "choice of O-RU IPv4 or IPv6 address";
+ }
+ leaf o-du-ip-address {
+ type inet:ip-address;
+ mandatory true;
+ description "O-DU's IP address";
+ }
+ leaf ru-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by O-RU";
+ }
+ leaf o-du-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by O-DU";
+ }
+ leaf ecpri-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
+ }
+ }
+ }
+
+ grouping shared-cell-flow-group {
+ description "a grouping for shared cell O-RU flows";
+
+ container north-eth-flow {
+ when "../../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE'";
+ if-feature "SHARED_CELL";
+ 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]/o-ran-int:mac-address";
+ }
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf north-node-mac-address {
+ type yang:mac-address;
+ description
+ "North-node's MAC address used for Ethernet based flow";
+ }
+ }
+ container south-eth-flow {
+ when "../../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE'";
+ if-feature "SHARED_CELL";
+ 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]/o-ran-int:mac-address";
+ }
+ description
+ "O-RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/o-ran-int:vlan-id";
+ }
+ description
+ "O-RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf south-node-mac-address {
+ type yang:mac-address;
+ description
+ "south-node's MAC address used for Ethernet based flow";
+ }
+ }
+ }
+
+ grouping session-and-markings-group {
+ description "a grouping with transport session type and enhanced uplane markings";
+
+ leaf transport-session-type {
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ enum SHARED-CELL-ETH-INTERFACE {
+ if-feature "SHARED_CELL";
+ description "VLAN based CUS Transport used for Shared Cell scenario";
+ }
+ }
+ default ETH-INTERFACE;
+ description
+ "the type of transport session used for identifying different processing
+ elements";
+ }
+ container enhanced-uplane-mapping {
+ presence "indicates that enhanced uplane mapping is used";
+ description "a mapping table for enhanced user plane marking";
+ list uplane-mapping {
+ key "up-marking-name";
+ description
+ "a mapping between up-link name and o-ran-interfaces:up-marking-name";
+ leaf up-marking-name {
+ type string;
+ description "a unique up marking name that is used for enhanced up marking";
+ }
+ choice up-markings {
+ description
+ "U-Plane markings";
+ case ethernet {
+ when "(../../transport-session-type = 'ALIASMAC-INTERFACE') or
+ (../../transport-session-type = 'ETH-INTERFACE') or
+ (../../transport-session-type = 'SHARED-CELL-ETH-INTERFACE')";
+ leaf up-cos-name {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:class-of-service/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the Ethernet U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ case ipv4 {
+ when "(../../transport-session-type = 'UDPIP-INTERFACE')";
+ leaf upv4-dscp-name {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ type leafref {
+ path "/if:interfaces/if:interface/ip:ipv4/o-ran-int:diffserv-markings/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the IPv4 U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ case ipv6 {
+ when "(../../transport-session-type = 'UDPIP-INTERFACE')";
+ leaf upv6-dscp-name {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ type leafref {
+ path "/if:interfaces/if:interface/ip:ipv6/o-ran-int:diffserv-markings/o-ran-int:enhanced-uplane-markings/o-ran-int:up-marking-name";
+ }
+ description "the IPv6 U-plane transport marking as defined in o-ran-interfaces";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping pe-group {
+ description "a grouping of processing elements";
+ leaf maximum-number-of-transport-flows {
+ type uint16 {
+ range "1..4094";
+ }
+ default 4094;
+ config false;
+ description
+ "The maximum number of transport flows that can be supported by an O-RU";
+ }
+ uses session-and-markings-group;
+
+ 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 O-RU that identifies a processing
+ element instance.
+
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The identity of a shared resource operator. When present,
+ indicates that the list entry corresponds to a processing element
+ associated with a shared resource operator where the sro-id identifies
+ the specific shared resource operator";
+ }
+ 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 ";
+ }
+ uses non-shared-cell-flow-group;
+ uses shared-cell-flow-group;
+
+ }
+ }
+ list additional-transport-session-type-elements {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ key transport-session-type;
+
+ description
+ "Added to support multiple transport-session-type per O-RU,
+ it is always assumed that /processing-elements/ru-elements/ is configured with the first type of transport,
+ and /processing-element/additional-transport-session-elements/ru-elements/ is configured with the other types of transport.
+ If the O-RU is configured for shared-cell, this list will not be used. An O-RU shall reject any configuration
+ with a list entry with transport-session-type set to SHARED-CELL-ETH-INTERFACE";
+
+ uses session-and-markings-group;
+
+ 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 O-RU that identifies a processing
+ element instance.
+
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The identity of a shared resource operator. When present,
+ indicates that the list entry corresponds to a processing element
+ associated with a shared resource operator where the sro-id identifies
+ the specific shared resource operator";
+ }
+ 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 ";
+ }
+ uses non-shared-cell-flow-group;
+ }
+ }
+ }
+ }
+
+// top-level container
+
+ container processing-elements {
+ description
+ "a model defining the mapping between transport flows and arbitrary
+ O-RAN 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";
+ uses pe-group;
+ }
+}
--- /dev/null
+module o-ran-shared-cell {
+ yang-version 1.1;
+ namespace "urn:o-ran:shared-cell:1.0";
+ prefix "o-ran-sc";
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+ import o-ran-processing-element {
+ prefix "o-ran-pe";
+ }
+
+ import o-ran-common-yang-types {
+ prefix "o-ran-cmn";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the YANG definitions for shared cell capable O-RU (Cascade and FHM).
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add copy combine capacity per port.
+ 2) fix of missed radio timing correction.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) ability to support copy combine delay per SCS";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) supported SCSes are added as the capability
+ 2) deprecate downlink-radio-frame-offset in copy entity";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) eaxc-id-group support in shared cell";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) added SHARED-ORU-MULTI-OPERATOR anf SHARED-ORU-MULTI-ODU features";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add support for multi-cell in cascade mode.
+ 3) add SCS info and mapping with eaxc-id into Combine-entity.
+ 4) add enhanced-t-combine feature Add T_combine-net (capability)
+ 5) add Tx-duration, enhanced-t-combine-enabled";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added selective combining using beamId.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) initial version for shared cell O-RU related yang module.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ feature FHM {
+ description
+ "Presence of feature indicates that O-RU acts as FHM and doesn't have
+ the capability of radio transmission and reception. Absence of feature
+ indicates that O-RU does not act as FHM and supports radio transmission
+ and reception function.";
+ }
+
+ feature SELECTIVE-BEAM-ID {
+ description
+ "Presence of feature indicates that FHM supports the selective combining
+ function by using beamId";
+ }
+
+ // radio offsets
+ grouping radio-offset {
+ description
+ "shared cell FHM mode needs the configuration for radio related offset";
+ 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: Unit is 1/1.2288e9 sec.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ mandatory true;
+
+ description
+ "This parameter is used for offsetting SFN value.
+ Unit is 10ms.";
+ }
+ }
+
+ // shared cell capability
+ grouping shared-cell-module-capability{
+ description
+ "shared cell related module capability of O-RU";
+ container shared-cell-module-cap {
+ config false;
+ description
+ "indicates shared cell specific module capability";
+
+ leaf t-copy {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between receiving an IQ sample over the fronthaul interface from
+ the north-node, coping it and transmitting it over the fronthaul
+ interface to the south-node.";
+ }
+
+ leaf t-combine {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between receiving an IQ sample over the fronthaul interface from
+ the south-node(s), combing them and transmitting it over the
+ fronthaul interface to the north-node.
+
+ When enhanced-t-combine-enabled is 'true' by O-DU, FHM/Cascade O-RU supporting
+ ENHANCED-T-COMBINE uses t-combine-net and tx-duration instead of this value.";
+ }
+
+ leaf t-combine-net {
+ type uint32;
+ units nanoseconds;
+ description
+ "Corresponding to the maximum FHM or cascade O-RU processing delay
+ between starting time to combine IQ data from received message(s)
+ and starting time to transmit them with a message over the fronthaul
+ interface to O-DU or the north-node.";
+ }
+
+ leaf-list scs-supported {
+ if-feature FHM;
+ type o-ran-cmn:scs-config-type;
+ description
+ "List of supported scs by FHM";
+ }
+
+ list combine-delay-per-scs {
+ key "scs";
+ description
+ "This is a list of combine delay according to SCS.";
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages.";
+ }
+
+ leaf t-combine-net {
+ type uint32;
+ units nanoseconds;
+ description
+ "t-combine-net value corresponding to SCS.";
+ }
+
+ leaf t-combine {
+ type uint32;
+ units nanoseconds;
+ description
+ "t-combine value corresponding to SCS.";
+ }
+ }
+
+ leaf ta3-prime-max-upper-range {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "The upper limit for the configurable ta3-prime-max value.
+ This is the capability information of O-RU that comes from
+ the O-RU internal memory for the combine operation.";
+ }
+
+ leaf max-number-node-copy-and-combine {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of south-node for the copy-and-combine
+ functions of cascade O-RU or FHM.
+ For cascade mode, this value is one. It means
+ O-RU copies the stream of eCPRI messages only once for the connected
+ south-node and copied stream are forwarded to the south-node.
+ Similarly, the cascade O-RU combines once for the streams of
+ eCPRI messages received from the south node and the streams of radio
+ reception function.
+ For FHM mode, FHM is able to copy the stream of eCPRI messages
+ according to this parameter and forward each copied stream
+ to each south-node. FHM is able to combine the streams of eCPRI
+ messages received from the multiple south-nodes corresponding to
+ this parameter at most.";
+ }
+
+ leaf max-number-eaxcid-copy {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of eaxc-ids for the copy functions
+ of cascade O-RU or FHM.
+ For Cascade O-RU, it is same number of static-low-level-tx-endpoints plus
+ static-low-level-rx-endpoints, for which low-level-tx(rx)-endpoints
+ are configured with eaxc-id in u-plane configuration.
+ For FHM, it is max configurable number of eaxc-ids in
+ tx-eaxc-id and rx-eaxc-id in shared-cell-copy-uplane-config.";
+ }
+
+ leaf max-number-eaxcid-combine {
+ type uint8{
+ range "1..max";
+ }
+ mandatory true;
+ description
+ "Indicates the maximum number of eaxc-ids for the combine functions
+ of cascade O-RU or FHM.
+ For Cascade O-RU, it is same number of static-low-level-rx-endpoints,
+ for which low-level-rx-endpoints are configured with eaxc-id in
+ u-plane configuration.
+ For FHM, it is max configurable number of eaxc-ids in rx-eaxc-id
+ in shared-cell-combine-uplane-config across all combine-enities.
+
+ When multiple scs or multiple c-plane section types with a single eaxc-id
+ are used for FHM supporting MULTIPLE-SCS-IN-EAXC, all eaxc-id instances
+ across scs, C-Plane section types and combine entities are counted even
+ though they are same eaxc-id. The counted number shall not excced this value.";
+ }
+
+ list copy-combine-capacity-per-port {
+ key "port-number";
+ description
+ "Presence of this list indicates that FHM has a different capacity per port in south bound.
+ This is a list of copy-combine-capacity per port-number for copy and combining function.
+ Absence of this list indicates all ports has the universal capacity described by other RO parameters.";
+
+ leaf port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "port number assigned to interface and its physical port.";
+ }
+
+ leaf copy-combine-capacity-type-id {
+ type leafref {
+ path "../../copy-combine-capacity-type/id";
+ }
+ description
+ "copy-combine-capacity-type assigned to port-number.";
+ }
+ }
+
+ list copy-combine-capacity-type {
+ key "id";
+ description
+ "Properties of copy-combine-capacity for copy and combine functions.";
+
+ leaf id {
+ type uint8;
+ description
+ "Identifies type of copy-combine-capacity.";
+ }
+
+ leaf max-num-of-nodes-combine-in-port {
+ type uint8 {
+ range "1..max";
+ }
+ description
+ "This parameter indicates how many south-nodes connected to a single port can be supported
+ at maximum for combine functions regardless of whether eaxc-ids are same or not.";
+ }
+
+ leaf max-num-of-eaxc-id-combine-in-port {
+ type uint16 {
+ range "1..max";
+ }
+ description
+ "This parameter indicates how many eaxc-ids for combine functions can be supported in a port at maximum.
+ Multiple eAxC flows with the same eaxc-id are counted as the corresponding plural value.
+ E.g. 8 eAxC flows with eAxC-id=0 are counted as 8.";
+ }
+ }
+
+ container eaxc-id-group-capabilities {
+ if-feature FHM;
+ description
+ "Presence of this container indicates that FHM can refer to C-Plane in UL direction
+ to support combining U-Plane messages commanded by C-Plane with Section Extension 10.";
+ leaf max-num-rx-eaxc-id-groups {
+ type uint8;
+ description
+ "Maximum number of configurable rx-eaxc-id-group supported by FHM.";
+ }
+
+ leaf max-num-rx-eaxc-ids-per-group {
+ type uint8;
+ description
+ "Maximum number of member-rx-eaxc-id in single rx-eaxc-id-group supported by FHM.";
+ }
+ }
+
+ list compression-method-supported {
+ if-feature FHM;
+ description
+ "List of supported compression methods for FHM";
+ uses cf:compression-details;
+ }
+
+ leaf multi-cell-in-cascade-mode-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports multi cell
+ operation in shared cell cascade mode.
+ If multi-cell-in-cascade-mode-supported = false then each shared cell
+ O-RU in a physical cascaded chain can only be used for operating
+ carriers that correspond to a single cell.
+ If multi-cell-in-cascade-mode-supported = true, it means that the O-RU
+ may be configured such that the shared-cell carriers can be used to
+ support mutiple different cells, where each cell is served by its own
+ separate cascade chain. See CUS-Plane Specification for more details.";
+ }
+ }
+ }
+
+ // shared cell mode configuration
+ grouping shared-cell-mode{
+ description
+ "A grouping defining the schema nodes for shared cell configuration";
+ choice shared-cell-copy-combine-mode {
+ case COMMON {
+ description
+ "all eCPRI payload are the target for copy and combine functions.
+ Common set of eaxc-ids are used in O-RU in the shared cell network.
+ For cascade mode, eaxc-ids of low-level-tx(rx)-links in
+ o-ran-uplane-configuration that has relation to the
+ processing-element are used.
+ For FHM mode, eaxc-ids of shared-cell-copy-uplane-config and
+ those of shared-cell-combine-config are used.";
+
+ uses shared-cell-copy-configuration;
+ uses shared-cell-combine-configuration;
+ }
+ case SELECTIVE-BEAM-ID {
+ if-feature "FHM and SELECTIVE-BEAM-ID";
+ description
+ "Case that FHM has selective transmission and reception function
+ by using beamId";
+
+ uses shared-cell-copy-configuration-for-selective-beam-id;
+ uses shared-cell-combine-configuration-for-selective-beam-id;
+ }
+ case SELECTIVE {
+ description "for future use";
+ }
+ description
+ "configuration mode can be selected.";
+ }
+ }
+
+ // processing elements set
+ grouping processing-element-set{
+ description
+ "shared-cell-copy/combine-configuration refers the pair of processing
+ element set of a north-node and a south-node.";
+
+ leaf north-node-processing-element{
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "north-node processing element indicates the set of
+ 'north-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ north-eth-flow is selected for the transport flow.";
+ }
+
+ leaf-list south-node-processing-elements{
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+ } // processing-element-set
+
+ // processing elements set for SELECTIVE-BEAM-ID
+ grouping processing-element-set-for-selective-beam-id {
+ description
+ "shared-cell-copy/combine-configuration refers the pair of processing
+ element set of a north-node and a south-node.";
+
+ leaf north-node-processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "north-node processing element indicates the set of
+ 'north-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ north-eth-flow is selected for the transport flow.";
+ }
+
+ leaf-list south-node-processing-elements {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+
+ list mapping-table-for-selective-beam-id {
+ key "global-beam-id south-node-processing-elements";
+ description "the mapping information between global-beam-id and local-beam-id";
+
+ leaf global-beam-id {
+ type uint16;
+ description
+ "This parameter indicates the beam ID to be applied to the U-Plane data
+ on O-DU as same as existing beamId. One global beamId can be mapped
+ to one or multiple local beamId.
+ The mapping information between each global beamId, O-RU(s),
+ and local beamId is configured to the FHM during M-Plane start-up procedure.";
+ }
+
+ leaf south-node-processing-elements {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "south-node processing elements indicate the sets of
+ 'south-node-mac-address', 'ru-mac-address' and 'vlan-id' in case
+ south-eth-flow is selected for the transport flow.";
+ }
+
+ leaf local-beam-id {
+ type uint16;
+ description
+ "This parameter indicates the beam ID to be applied to
+ the U-Plane data on O-RU as same as existing beamId.
+ In one O-RU, different beams can not map to one global beamId.
+ Local beamId shall be unique within O-RU.";
+ }
+ }
+ } // processing-element-set for SELECTIVE-BEAM-ID
+
+ // shared cell copy and combine config
+ grouping shared-cell-copy-configuration {
+ description
+ "shared-cell-copy-configuration";
+ list shared-cell-copy-entities {
+ key name;
+ description
+ "copy entity. The north-node is an O-DU or an O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name{
+ type string;
+ description
+ "the name of shared-cell-copy-entity.";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell copy entity
+ associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set;
+
+ container shared-cell-copy-uplane-config {
+ if-feature FHM;
+ description
+ "Container consists of uplane-info for copy-configuration for FHM.";
+
+ list tx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-tx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ leaf downlink-radio-frame-offset {
+ type uint32 {
+ range 0..12288000;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting the starting position of 10ms radio frame.
+ Note: Unit is 1/1.2288e9 sec.
+ This node is not relevant to copy function and is deprecated.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting SFN value.Unit is 10ms.
+ Unit is 10ms.
+ This node is not relevant to copy function and is deprecated.";
+ }
+ }
+ } // shared-cell-copy-entities
+ } // shared-cell-copy-configuration (groupings)
+
+ grouping shared-cell-copy-configuration-for-selective-beam-id {
+ description
+ "shared-cell-copy-configuration for selective function by beam id";
+ list shared-cell-copy-entities-selective-beam-id {
+ key name;
+ description
+ "copy entity. The north-node is an O-DU or an O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name {
+ type string;
+ description
+ "the name of shared-cell-copy-entity.";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell copy entity
+ with selective bean id associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set-for-selective-beam-id;
+
+ container shared-cell-copy-uplane-config {
+ if-feature FHM;
+ description
+ "Container consists of uplane-info for copy-configuration for FHM.";
+
+ list tx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-tx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to copy";
+
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ leaf downlink-radio-frame-offset {
+ type uint32 {
+ range 0..12288000;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting the starting position of 10ms radio frame.
+ Note: Unit is 1/1.2288e9 sec.
+ This node is not relevant to copy function and is deprecated.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ status deprecated;
+
+ description
+ "This parameter is used for offsetting SFN value.Unit is 10ms.
+ Unit is 10ms.
+ This node is not relevant to copy function and is deprecated.";
+ }
+ }
+ } // shared-cell-copy-entities for SELECTIVE-BEAM-ID
+ } // shared-cell-copy-configuration (groupings) for SELECTIVE-BEAM-ID
+
+ grouping shared-cell-combine-configuration {
+ description
+ "shared-cell-combine-configuration";
+
+ list shared-cell-combine-entities {
+ key name;
+ description
+ "combine configuration. The north-node is O-DU or O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name{
+ type string;
+ description
+ "name of shared-cell-combine-entity";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell combine entity
+ associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+
+ uses processing-element-set;
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages belong to combine-entity";
+ }
+
+ leaf ta3-prime-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "indicates the latest time that FHM or cascade O-RU is allowed to
+ send UL U-plane message to north-node relative to reception
+ timing at O-RU antenna.";
+ }
+
+ leaf tx-duration {
+ type uint32;
+ units nanoseconds;
+ description
+ "informs FHM/Cascade O-RU of the maximum duration time of transmission
+ over the fronthaul interface to O-DU or north-node for messages
+ to be sent within Ta3-prime-max.";
+ }
+
+ uses shared-cell-combine-uplane-config;
+ }
+ }
+
+ grouping shared-cell-combine-configuration-for-selective-beam-id {
+ description
+ "shared-cell-combine-configuration for selective function by beam id";
+
+ list shared-cell-combine-entities-for-selective-beam-id {
+ key name;
+ description
+ "combine configuration. The north-node is O-DU or O-RU.
+ The south-nodes are O-RUs.
+ The number of south-nodes is at most one for cascade O-RU and
+ more than one for FHM";
+
+ leaf name {
+ type string;
+ description
+ "name of shared-cell-combine-entity";
+ }
+
+ leaf odu-id {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "An optional o-du identity associated with this list entry.
+ When present, indicates that the list entry is associated with
+ a particular odu-id.";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource identity associated with this list entry.
+ When present, indicates that the list entry corresponds to a shared cell combine entity
+ for selective beam id associated with a shared resouce operator where the sro-id
+ identifies the specific shared resouce operator.
+
+ This schema-node is used to refince NACM privileges for shared
+ resource operators";
+ }
+
+ uses processing-element-set;
+
+ leaf scs {
+ type o-ran-cmn:scs-config-type;
+ description
+ "sub-carrier spacing of U-Plane messages belong to combine-entity";
+ }
+
+ leaf ta3-prime-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "indicates the latest time that FHM or cascade O-RU is allowed to
+ send UL U-plane message to north-node relative to reception
+ timing at O-RU antenna.";
+ }
+
+ leaf tx-duration {
+ type uint32;
+ units nanoseconds;
+ description
+ "informs FHM/Cascade O-RU of the maximum duration time of transmission
+ over the fronthaul interface to O-DU or north-node for messages
+ to be sent within Ta3-prime-max.";
+ }
+
+ uses shared-cell-combine-uplane-config;
+ }
+ }
+
+
+ grouping shared-cell-combine-uplane-config {
+ description
+ "shared cell related uplane configuration applicable to O-RU which
+ doesn't have radio transmission capability";
+ container shared-cell-combine-uplane-config {
+ if-feature FHM;
+ description
+ "when O-RU doesn't have radio transmission availability for FHM mode,
+ the required u-plane configuration for copy and combine function
+ are defined, instead of the lists of o-ran-uplane-conf.yang";
+
+ list rx-eaxc-id {
+ key eaxc-id;
+ description
+ "used for low-level-rx-endpoints to combine";
+ leaf eaxc-id {
+ type uint16;
+ description
+ "encoded value of eaxc-id to be read by CU-Plane";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ description
+ "Determines max number of PRBs that can be scheduled in all sections
+ per one symbol.
+ This value is used when uplink C-plane message indicates that all PRBs
+ is indicated in the field of numPrbc or tx-duration is calculated.";
+ }
+
+ leaf-list cp-ul-section-type {
+ type enumeration {
+ enum ST1 {
+ description
+ "section type 1 is used.";
+ }
+ enum ST3P{
+ description
+ "section type 3 is used for PRACH .";
+ }
+ enum ST3M{
+ description
+ "section type 3 is used for PUxCH when mixed numeroloy is applied.";
+ }
+ }
+ description
+ "indicates what section type is used for a specific eaxc-id with a specfic
+ SCS/frameStructure which belongs to this combine-entity.";
+ }
+
+ container comression-method {
+ description
+ "for combine mechanism, compression method per eaxc-id applied in
+ south-node is known to FHM ";
+ uses cf:compression-details;
+ }
+ }
+
+ uses radio-offset;
+
+ leaf n-ta-offset {
+ type uint32;
+ units Tc;
+ mandatory true;
+ description
+ "Value of configurable N-TA offset
+ units are Tc=~0.5ns=1/1.96608GHz";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ mandatory true;
+ status deprecated;
+ description
+ "Determines max number of PRBs that will be used in all sections
+ per one symbol.
+ This value is used only when uplink C-plane message indicates that
+ all PRB is used in the field of numPrbc
+
+ This node is deprecated and replaced by number-of-prb in the list of rx-eaxc-id.
+ This movement is intended to prevent the fragmentation of shared-cell-combine-entities
+ according to the different value of number-of-prb.";
+ }
+ }
+ }
+
+// top-level container
+ container shared-cell{
+ description
+ "This container for shared-cell consists of capability information and
+ configurable parameters";
+ uses shared-cell-module-capability;
+
+ container shared-cell-config {
+ description "configuration for shared cell.";
+ uses shared-cell-mode;
+
+ leaf max-num-rx-eaxc-ids-per-group {
+ if-feature FHM;
+ type leafref {
+ path "/o-ran-sc:shared-cell/o-ran-sc:shared-cell-module-cap/o-ran-sc:eaxc-id-group-capabilities/o-ran-sc:max-num-rx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "RW value of max-num-rx-eaxc-ids-per-group";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ if-feature FHM;
+ type leafref {
+ path "/o-ran-sc:shared-cell/o-ran-sc:shared-cell-module-cap/o-ran-sc:eaxc-id-group-capabilities/o-ran-sc:max-num-rx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "RW value of max-num-rx-eaxc-id-groups";
+ }
+
+ list rx-eaxc-id-group {
+ if-feature FHM;
+ must "count(../rx-eaxc-id-group) <= ../max-num-rx-eaxc-id-groups" {
+ error-message "too many rx-eaxcid-id groups";
+ }
+ key "representative-rx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs.
+ Each group is a union of a 'representative-rx-eaxc-id'and 'member-rx-eaxc-id's.
+ When section type 3 C-Plane in UL direction is used with Section Extension 10 in the shared cell,
+ this group shall be informed to FHM.";
+ leaf representative-rx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-rx-eaxc-id'(s).";
+ }
+ leaf-list member-rx-eaxc-id {
+ type uint16;
+ must "count(../member-rx-eaxc-id) <= ../../max-num-rx-eaxc-ids-per-group" {
+ error-message "too many rx-eaxcid-id members";
+ }
+ must "current()!=../representative-rx-eaxc-id" {
+ error-message "the representative eaxcid does not need to be a list member";
+ }
+ description
+ "This is a list of member eAxC IDs,which is associated with 'representative-rx-eaxc-id' in a group.";
+ }
+ }
+
+ leaf enhanced-t-combine-enabled {
+ if-feature feat:ENHANCED-T-COMBINE;
+ type boolean;
+ default false;
+ description
+ "O-DU informs FHM/Cascade O-RU that t-combine-net and tx-duration
+ are used to calculate T-waiting instead of t-combine.";
+ }
+
+ leaf multiple-scs-in-eaxc-used {
+ if-feature feat:MULTIPLE-SCS-IN-EAXC;
+ type boolean;
+ default false;
+ description
+ "O-DU informs FHM/Cascade O-RU that multiple scs or
+ multiple section types in a single eAxC id are used.";
+ }
+ }
+ }
+}
--- /dev/null
+module o-ran-software-management {
+ yang-version 1.1;
+ namespace "urn:o-ran:software-management:1.0";
+ prefix o-ran-swm;
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import o-ran-hardware {
+ prefix "o-ran-hw";
+ }
+
+ import o-ran-file-management {
+ prefix "o-ran-file-mgmt";
+ }
+
+ import o-ran-wg4-features {
+ prefix "or-feat";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.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 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 11.1.0
+
+ 1) remove import by revision date for ietf-inet-types.";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) SW Install timeout
+ 2) check integrity directly after download";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 9.1.0
+
+ 1) clarified description statements
+ 2) style guide corrections
+ 3) changed import prefix for o-ran-file-management";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) aded new parameter build-content-download";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions
+ 2) new option to use IANA private enterprise number as vendor-code";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) added FTPES support";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.0.2
+
+ 1) backward compatible changes to correct sFTP Server Authentication .
+ 2) simplifying file management and authentication to reuse from o-ran-file-management module
+ 3) minor fixes according to lack of descriptions
+ 4) removal of not used grouping
+ 5) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+
+ // groupings
+
+ grouping slot-group {
+ description
+ "Contains information about each software slot and its content.";
+ list software-slot {
+ key name;
+ min-elements 2;
+
+ description
+ "Information about available software-slots, their status, state and content.";
+
+ leaf name {
+ type string;
+
+ description
+ "Name of the software slot. This shall be unique to identify the software-slot.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum VALID {
+ description
+ "Slot contains software considered as proven valid";
+ }
+ enum INVALID {
+ description
+ "Software in the slot is considered by O-RU as invalid (e.g. wrong CRC).
+ O-RU prohibits activation of slot with such status.";
+ }
+ enum EMPTY {
+ description
+ "Slot does not contain software package. O-RU prohibits activation of slot
+ with such status.";
+ }
+ }
+ 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 writeability 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/o-ran-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..5;
+ pattern '(.{1,2})|(\d{1,5})';
+ }
+ config false;
+
+ description
+ "Unique code of the vendor. This is derived from manifest file.
+
+ This may be a 1 or two upper case characters or a 1-5 digit IANA Private Enterprise Number.";
+ }
+
+ leaf build-id {
+ type string;
+ config false;
+
+ description
+ "Identity associated with the software. 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 string;
+ description "The vendor-specific version string of the software build.";
+ }
+
+ list files {
+ key "name";
+ config false;
+
+ description "List of all the files present in the software slot.";
+
+ 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.";
+ }
+ }
+ }
+ }
+
+ grouping download-input {
+ description
+ "Grouping for SW download RPC input";
+ leaf remote-file-path {
+ type inet:uri;
+ mandatory true;
+ description
+ "URI of the software image including username.
+ The following format is possible:
+ When file download is via sftp, the format shall be of the form
+ sftp://<username>@<host>[:<port>]/path
+ When file transfer is via FTPES, the format shall be of the form
+ ftpes://<username>@<host>[:port]/path
+
+ Note, ftpes is not an IANA registered URI scheme, but used here to signal
+ that a file transfer should be performed over FTPES.";
+ }
+
+
+ uses o-ran-file-mgmt:credential-information;
+ }
+
+ grouping download-output {
+ description
+ "Grouping for SW download RPC 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 file download";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+
+ leaf notification-timeout {
+ type int32 {range "1..max";}
+ units seconds;
+ default 30;
+
+ description
+ "Notification timeout is the time NETCONF client shall
+ wait for a 'download-event' notification from O-RU. If there is no
+ 'download-event' notification received within notification-timeout,
+ NETCONF client shall assume the download timeout/failure, and follow necessary steps.";
+ }
+ }
+
+ grouping install-input {
+ description
+ "Grouping for SW installation RPC 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.";
+ }
+
+ leaf-list file-names {
+ type string;
+
+ description
+ "Names of the files within software package to be installed";
+ }
+ }
+
+ grouping install-output {
+ description
+ "Grouping for SW installation RPC 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 installation to software slot.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is FAILED.";
+ }
+
+ leaf sw-install-timeout {
+ type int32 {range "1..max";}
+ units seconds;
+
+ description
+ "Optional timeout indicated by O-RU after which time
+ an 'install-event' notification will be sent indicating
+ the installation procedure has timed out.";
+ }
+ }
+
+ grouping activate-input {
+ description
+ "Grouping for SW activation RPC input";
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+ must "/software-inventory/software-slot[name = current()][status = 'VALID']" {
+ error-message "software activation may be requested only on VALID slot!";
+ }
+ mandatory true;
+
+ description
+ "Slot name on which software has to be activated.";
+ }
+ }
+
+ grouping activate-output {
+ description
+ "Grouping for SW activation RPC 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 {range "1..max";}
+ units seconds;
+ default 30;
+
+ description
+ "Timeout on client waiting for the activate event";
+ }
+ }
+
+ grouping download-notification {
+ description
+ "Grouping for notification event structure for download completion";
+ leaf file-name {
+ type string;
+ mandatory true;
+
+ description
+ "File name of transferred software file.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum COMPLETED {
+ description
+ "Operation completed successfully";
+ }
+ enum AUTHENTICATION_ERROR {
+ description "Source available, wrong credentials";
+ }
+ enum PROTOCOL_ERROR {
+ description "SFTP or FTPES errors";
+ }
+ enum FILE_NOT_FOUND {
+ description "Source not available.";
+ }
+ enum APPLICATION_ERROR {
+ description "Application related errors";
+ }
+ enum TIMEOUT {
+ description "Timeout waiting for download";
+ }
+ enum INTEGRITY_ERROR {
+ description "File is corrupted";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+
+ grouping install-notification {
+ description
+ "Grouping for 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 successfully";
+ }
+ 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";
+ }
+ enum TIMEOUT {
+ description "Install operation timed out";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+
+ grouping activation-notification {
+ description
+ "Grouping for 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 successfully";
+ }
+ 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";
+ }
+ }
+
+ // top-level container
+
+ container software-inventory {
+ config false;
+ description
+ "Contains information about each software slot and its content as well as information related to
+ software processing.";
+
+ uses slot-group;
+
+ leaf build-content-download {
+ type empty;
+ description
+ "An optional leaf used to indicate that the O-RU requires separate download procedures to be
+ re-used for downloading individual files in a software build, instead of a single archived package.";
+ }
+
+ leaf integrity-check-at-download-enabled {
+ if-feature or-feat:INTEGRITY-CHECK-AT-SW-DOWNLOAD;
+ type empty;
+ description "Presence of this node enables O-RU to perform integrity check at file download.";
+ }
+
+ }
+ // RPC statements
+
+ rpc software-download {
+ description
+ "RPC needed to perform software download operation.";
+
+ input {
+ uses download-input;
+ }
+ output {
+ uses download-output;
+ }
+ }
+
+ rpc software-install {
+ description
+ "Install a previously downloaded software.";
+
+ input {
+ uses install-input;
+ }
+ output {
+ uses install-output;
+ }
+ }
+
+ rpc software-activate {
+ description
+ "Activate a previously installed software.";
+ input {
+ uses activate-input;
+ }
+ output {
+ uses activate-output;
+ }
+ }
+
+ // notification definitions
+ notification download-event {
+ description "Notification event structure for download completion";
+ uses download-notification;
+
+ }
+
+ notification install-event {
+ description "Notification event structure for installation completion";
+ uses install-notification;
+ }
+
+ notification activation-event {
+ description "Notification event structure for activation completion";
+ uses activation-notification;
+ }
+}
--- /dev/null
+module o-ran-supervision {
+ yang-version 1.1;
+ namespace "urn:o-ran:supervision:1.0";
+ prefix "o-ran-supervision";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+ import ietf-netconf-monitoring {
+ prefix ncm;
+ }
+
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the configuration data and supervision RPCs that are
+ used to detect loss M-Plane connectivity.
+
+ Copyright 2021 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) NETCONF session supervison with session id";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced SHARED-ORU-MULTI-ODU and SHARED-ORU-MULTI-OPERATOR features.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 5.2.0
+
+ 1) typographical corrections in descriptions.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 5.1.0
+
+ 1) typographical corrections in descriptions.
+ 2) removed non-ACSII characters.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) added Event Producer-Collector supervision";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) added output string to enable indication if config modification change has failed
+ 2) corrected model description
+ 3) removed erroneous text in notification description";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) added leafs for CU plane monitoring
+ 2) backward compatible changes to introduce groupings";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+
+
+ typedef event-collector-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "An Event Collector identifier";
+ }
+
+ grouping watchdog-input {
+ description "a watchdog input grouping";
+ leaf supervision-notification-interval {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The interval in seconds at which supervision notifications are sent.
+ If not specified the default value of 60 seconds shall apply.";
+ }
+ leaf guard-timer-overhead {
+ type uint16;
+ units seconds;
+ default 10;
+ description
+ "This is overhead added to the supervision timer used to calculate the
+ supervision watchdog timer. i.e.,
+
+ supervision timer = notification timer + guard-timer-overhead
+
+ If not specified the default value of 10 seconds shall apply.
+
+ Failure to send this RPC again within the timeout sets the radio into
+ 'loss of supervision' state.
+
+ NOTE - The supervision timer MUST not be less that the confirmed
+ timeout timer (when the feature is supported).
+
+ This type of constraint (using an RPC's input) cannot be formally
+ expressed in YANG.";
+ }
+ }
+
+ grouping watchdog-output {
+ description "a watchdog output grouping";
+ leaf next-update-at {
+ type yang:date-and-time;
+ description
+ "Indicates the time when the next supervision notification is expected.";
+ }
+
+ leaf error-message {
+ type string;
+
+ description
+ "An optional error message, e.g., used when the RPC input attempts to
+ modify a locked running configuration.
+
+ Take note, the supervision-notification-interval and guard-timer-overhead
+ have default values and so their values can be modified even when a leaf is
+ not included in the RPC input.";
+ }
+ }
+
+ grouping supervision-notification-data {
+ description "a supervision notification data grouping";
+ leaf session-id {
+ if-feature or-feat:SUPERVISION-WITH-SESSION-ID;
+ type leafref {
+ path "/ncm:netconf-state/ncm:sessions/ncm:session/ncm:session-id";
+ }
+ mandatory true;
+ description
+ "This value uniquely identifies the NETCONF session in an O-RU. The value is conveyed to NETCONF client in hello message.
+ the session-id for the netconf session is sent as part of each supervision-notification notification.
+ and may be used for create-subscription to filter the relevant
+ notifications";
+ }
+ }
+
+ grouping supervision-group {
+ description "a supervision grouping";
+ container cu-plane-monitoring {
+ presence
+ "Indicates O-RU supports timer based cu-plane monitoring interval. If
+ this container is NOT present, the operation of the O-RU is undefined.";
+ description "container describing operation of CU plane monitoring";
+
+ leaf configured-cu-monitoring-interval {
+ type uint8 {
+ range "0..160";
+ }
+ units milliseconds;
+ default 160;
+ description
+ "This value corresponds to the configured value of the timer used by
+ the O-RU to monitor the C/U plane connection.
+
+ A value of 0 means that the O-RU's shall disable its CU plane
+ monitoring.
+
+ A NETCONF client should configure the value according to the
+ configuration of the PHY layer and/or C/U plane section types
+ supported and/or any fault tolerant operation. For example,
+
+ i) when operating with an O-DU supporting non-LAA LTE, this value can
+ be configured to a value according to the repetition time of
+ transmitted reference symbols across the fronthaul interface
+ ii) when operating with an O-DU supporting C-Plane Section Type 0,
+ this value can configured to a value according to the minimum
+ repetition interval of section type 0.
+ iii) when operating with an O-DU supporting fault tolerant operation,
+ this value can be configured according to the fault tolerant heartbeat
+ interval ";
+ }
+ }
+ container event-collector-monitoring {
+ if-feature "or-feat:NON-PERSISTENT-MPLANE";
+ description "container describing operation of Event Collector monitoring";
+
+ leaf heartbeat-interval {
+ type uint8;
+ units seconds;
+ default 60;
+ description "the heartbeat interval";
+ }
+
+ leaf-list heartbeat-recipient-id {
+ type event-collector-id;
+ description
+ "A configured Event collector identity, to which the O-RU shall send heartbeat notifications";
+ }
+ }
+ container per-odu-monitoring {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU or or-feat:SHARED-ORU-MULTI-OPERATOR";
+ presence
+ "Indicates at least one of the O-RU Controllers intends to operate per O-DU supervision.";
+ description "container describing per-odu monitoring parameters";
+
+ list odu-ids {
+ if-feature or-feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "an optional list of o-du identities that an O-RU controller intends to use with per
+ O-DU supervision in a single operator envrionment. The odu-id values are used to match
+ values received in the supervision-watchdog-reset rpc together with values configured in
+ o-ran-uplane-conf based configuration.
+ The O-RU does not further interpret the specific value of odu-id.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU and or-feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "an optional list of sro and o-du identities that an O-RU controller intends to use with per
+ O-DU supervision in a multi-operator envrionment. The sro-id and odu-id values are used to match
+ values received in the supervision-watchdog-reset rpc together with values configured in
+ o-ran-uplane-conf based configuration.
+ The O-RU does not further interpret the specific value of sro-id or odu-id.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+ }
+ }
+
+ container supervision {
+ description "top leval supervision container";
+ uses supervision-group;
+ // other WG specific monitoring containers follow here
+ }
+
+ rpc supervision-watchdog-reset {
+ description
+ "rpc to reset the watchdog timer";
+ input {
+ uses watchdog-input;
+
+ container context {
+ if-feature "or-feat:SHARED-ORU-MULTI-ODU or or-feat:SHARED-ORU-MULTI-OPERATOR";
+ description
+ "an optional container that defines the context associated with the
+ watchdog reset. Context can be used in supervision operations with
+ multiple O-DUs";
+
+ leaf odu-id {
+ if-feature or-feat:SHARED-ORU-MULTI-ODU;
+ type string;
+ description
+ "an optional o-du identity associated with this
+ supervision watchdog operation. If an odu-id received is not configured
+ in the list of tx-array-carriers or list of rx-array carriers, this leaf is ignored.
+ When it does correspond to an odu-id listed in tx-array-carriers and/or
+ rx-array-carriers, the odu-id is used in the operatrion of per O-DU supervision.";
+ }
+
+ leaf sro-id {
+ if-feature or-feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "The shared resource identity associated with the current NETCONF session.
+ A supervision-watchdog-reset RPC received from NETCONF client
+ with user-group privileges of 'carrier' MUST be rejected
+ if it is received without a sro-id leaf.
+ In other scenarios, this leaf is optional and ignored by the O-RU.";
+ }
+ }
+ }
+
+ output {
+ uses watchdog-output;
+ }
+ }
+
+ notification supervision-notification {
+ description
+ "Notification to indicate that NETCONF management interface is up.";
+ uses supervision-notification-data;
+
+ }
+}
--- /dev/null
+module o-ran-sync {
+ yang-version 1.1;
+ namespace "urn:o-ran:sync:1.0";
+ prefix "o-ran-sync";
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import o-ran-wg4-features {
+ prefix or-feat;
+ }
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines synchronization mechanism for the O-RAN Equipment.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) added new sync capability for multi-port O-RU.
+ 2) added support for extended SSM and QL TLV.";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 8.1.0
+
+ 1) clarifiy description of quality-level";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) add support for boundary clock indication";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 1.4.0
+
+ 1) typographical corrections in descriptions.
+ 2) Description alignment with specification.";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 1.3.0
+
+ 1) Update description of ENCHANCED (sic) under container sync-capability leaf sync-t-tsc with
+ correct reference to IEEE 802.1CM sections.
+ 2) Add description that CLASS_B and ENHANCED are as per IEEE802.1CM.
+ 3) Add freq-error and time-error leafs under container sync-status. This allows an O-DU to
+ query the O-RU using NETCONF <get> procedure about the phase and frequency errors at
+ any time.
+ 4) Move delay-asymmetry outside of container g-8275-1-config as the delay asymmetry
+ is applicable to G.8275.2 as well
+ 5) Add gnss-rx-error in gnss-data for LLS-C4 configuration
+ 6) Correct the description of state enumerations under synce-status. The earlier
+ descriptions were copy paste from ptp-status";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 1.2.0
+
+ 1) enable O-RU to only support GNSS and not 802.1CM.";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature GNSS {
+ description
+ "This feature indicates that the equipment supports integrated GNSS functionality.";
+ }
+
+ feature ANTI-JAM {
+ description
+ "This feature indicates that the equipment supports Anti-jam functionality";
+ }
+
+ typedef ssm-code {
+ type enumeration {
+ enum PRC {
+ description
+ "PRC";
+ }
+ enum PRS {
+ description
+ "PRS";
+ }
+ enum SSU_A {
+ description
+ "SSU_A";
+ }
+ enum SSU_B {
+ description
+ "SSU_B";
+ }
+ enum ST2 {
+ description
+ "ST2";
+ }
+ enum ST3 {
+ description
+ "ST3";
+ }
+ enum ST3E {
+ description
+ "ST3E";
+ }
+ enum EEC1 {
+ description
+ "EEC1";
+ }
+ enum EEC2 {
+ description
+ "EEC2";
+ }
+ enum DNU {
+ description
+ "DNU";
+ }
+ enum PRTC {
+ description
+ "PRTC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum ePRTC {
+ description
+ "ePRTC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum eEEC {
+ description
+ "eEEC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum ePRC {
+ description
+ "ePRC can be set by O-RU controller only if extended-ql-tlv-supported is true";
+ }
+ enum NONE {
+ description
+ "NONE";
+ }
+ }
+ description
+ "List of SyncE SSMs quality levels.";
+ }
+
+
+ typedef geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ grouping sync-group {
+ description "This group represents the state and status of timing and synchronization of the O-RU";
+ container sync-status {
+ config false;
+
+ description
+ "Object of this class provides synchronization state of the module.";
+
+ leaf sync-state {
+ type enumeration {
+ enum LOCKED {
+ description
+ "equipment is in the locked mode, as defined in ITU-T G.810";
+ }
+ enum HOLDOVER {
+ description
+ "equipment clock is in holdover mode";
+ }
+ enum FREERUN {
+ description
+ "equipment clock isn't locked to an input reference, and is not in the holdover mode";
+ }
+ }
+ mandatory true;
+ description
+ "State of DU synchronization";
+ }
+ leaf time-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units nanoseconds;
+ description
+ "An optional leaf indicating an estimate of the current time error in the O-RU,
+ e.g., derived from a low pass filtering of the residual error of the PLL.
+ The definition of the filtering and updating is left to O-RU implementation.";
+ }
+ leaf frequency-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units parts-per-billion;
+ description
+ "An optional leaf indicating an estimate of the current frequency error in the O-RU,
+ e.g., derived from a low pass filtering of the residual error of the PLL.
+ The definition of the filtering and updating is left to O-RU implementation.";
+ }
+
+ 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 CLASS_B {
+ description
+ "Regular accuracy (previously referred to class B) for synchronization
+ is supported by the device as per IEEE802.1CM clause 6.4.1, Case 1.1";
+ }
+ enum ENCHANCED {
+ description
+ "Enhanced accuracy for synchronization is supported by the device as per
+ IEEE802.1CM clause 6.4.1, Case 1.2.
+
+ The typo in the name of the enumeration (ENCHANCED instead of ENHANCED)
+ is kept as is for backwards compatibility";
+ }
+ }
+ description
+ "When the O-RU supports 802.1CM, this leaf provides information about
+ T-TSC capability";
+
+ reference "IEEE 802.1CM";
+ }
+
+ leaf boundary-clock-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports the T-BC profiles in ITU-T G.8275.1.";
+ }
+ leaf extended-ql-tlv-supported {
+ type boolean;
+ description
+ "This parameter indicates whether O-RU supports the extended QL TLV as per ITU-T G.8264.";
+ }
+ }
+
+ 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.";
+ }
+
+ list accepted-clock-classes {
+ key clock-classes;
+ leaf clock-classes {
+ type uint8;
+ description
+ "PTP Clock Class accepted by the O-RU";
+ }
+ description
+ "Contains list of PTP acceptable Clock Classes, sorted in the descending order.";
+ }
+
+ leaf ptp-profile {
+ type enumeration {
+ enum G_8275_1 {
+ description
+ "Usage of multicast over Ethernet";
+ }
+
+ enum G_8275_2 {
+ description
+ "Usage of unicast over IP";
+ }
+ }
+ default "G_8275_1";
+ description
+ "Type of profile to be used in PTP setting";
+ }
+ 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 O-RU.
+ The error is defined in units of nanoseconds in the range +/-10 000 ns.
+
+ If the deprecated delay-asymmetry schema node in the g-8275-1-config container is configured
+ together with this schema node, then the O-RU shall use this schema node and ignore the
+ value in the g-8275-1-config container.";
+ }
+
+ container g-8275-1-config {
+ when "../ptp-profile='G_8275_1'";
+
+ description
+ "Container allowing for configuration of G8275.1";
+
+ leaf multicast-mac-address {
+ type enumeration {
+ enum FORWARDABLE {
+ description
+ "means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";
+ }
+ enum NONFORWARDABLE {
+ description
+ "means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";
+ }
+ }
+ default FORWARDABLE;
+ description
+ "The parameter defines destination MAC address, used by the DU in the egress PTP messages.";
+ }
+
+ leaf delay-asymmetry {
+ type int16 {
+ range -10000..10000;
+ }
+ default 0;
+ status deprecated;
+ description
+ "Defines static phase error in the recovered PTP timing signal to be compensated at the O-RU.
+ The error is defined in units of nanoseconds in the range +/-10 000 ns.";
+ }
+
+ list sources {
+ if-feature or-feat:PER-PORT-PTP-CONFIG;
+ must "(time-transmitter-only = 'true' and not-time-transmitter = 'false') or (time-transmitter-only = 'false' and not-time-transmitter = 'true') or (time-transmitter-only = 'false' and not-time-transmitter = 'false')"{
+ error-message
+ "Combination of time-transmitter-only and not-time-transmitter not allowed";
+ }
+ key local-port-number;
+ description
+ "Per port synchronization PTP sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,
+ where the PTP signal is located.";
+ }
+
+ leaf time-transmitter-only {
+ type boolean;
+ default false;
+ description
+ "This parameter defines if source is time transmitter only.";
+ }
+
+ leaf not-time-transmitter {
+ type boolean;
+ default false;
+ description
+ "This parameter defines if source is not time transmitter.";
+ }
+
+ leaf local-priority {
+ type uint8;
+ default 128;
+ description
+ "This parameter defines local priority used in the ITU-T 8275.1 best PTP source selection.";
+ }
+ }
+ }
+
+ container g-8275-2-config {
+ when "../ptp-profile='G_8275_2'";
+
+ description
+ "Container used for configuration of G8275.2 profile";
+
+ leaf local-ip-port {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Reference to interface name corresponding to IP interface
+ used for G.8275.2";
+ }
+
+ list master-ip-configuration {
+ key local-priority;
+ description
+ "The parameter defines list of IP configuration of devices acting as PTP signal source.";
+ leaf local-priority {
+ type uint8;
+ description
+ "The parameter defines local priority or underlying timeTransmitter IP address.";
+ }
+
+ leaf ip-address {
+ type string;
+ description
+ "the parameter defines timeTransmitter IP address.";
+ }
+ }
+
+ leaf log-inter-sync-period {
+ type int8 {
+ range "-7..0";
+ }
+
+ description
+ "The parameter defines number of sync message during 1 second";
+ }
+
+ leaf log-inter-announce-period {
+ type int8 {
+ range "-3..0";
+ }
+
+ description
+ "The parameter defines number of announce message during 1 second";
+ }
+ }
+ }
+
+ 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 O-RU, 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 O-RU";
+ }
+
+ leaf clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ config false;
+ description
+ "This parameter contains identity of the clock,
+ according to IEEE 1588-2008 definition, controlled by the O-RU.
+ The string shall be formatted as an 8-octet hex value with the '0x' prefix.";
+ }
+
+ leaf partial-timing-supported {
+ type boolean;
+ config false;
+ description
+ "Provides information wheter G.8275.2 (partial timing support from network) is supported.";
+ }
+
+ list sources {
+ key local-port-number;
+ config false;
+
+ description
+ "Synchronization sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ 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 timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, can potentially synchronize to,
+ i.e. clock class and priority, announced by the timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, has an operational connection to,
+ but the class or priority of the timeTransmitter 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 timeTransmitter, which the clock,
+ controlled by the NETCONF Server, has no operational connection to.
+ This applies to ports not receiving Announce messages i.e.
+ ports unused or in time transmitter state.";
+ }
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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).
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf source-clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf source-port-number {
+ type uint16;
+ description
+ "This parameter reflects value of the sourcePortNumber attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf priority1 {
+ type uint8;
+ description
+ "This parameter reflects value of the priority1 attribute in Announce
+ messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf clock-class {
+ type uint8;
+ description
+ "This parameter reflects value of the clockClass attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf clock-accuracy {
+ type uint8;
+ description
+ "This parameter reflects value of the clockAccuracy attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf offset-scaled-log-variance {
+ type uint16;
+ description
+ "This parameter reflects value of the offsetScaledLogVariance
+ attribute in Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf priority2 {
+ type uint8;
+ description
+ "This parameter reflects value of the priority2 attribute in Announce
+ messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf grandmaster-clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ 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.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf time-source {
+ type uint8;
+ description
+ "This parameter reflects value of the timeSource attribute in
+ Announce messages, received from the PTP source.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+ }
+ }
+
+ container synce-config {
+ description
+ "This container defines the configuration of SyncE";
+
+ leaf-list acceptance-list-of-ssm {
+ type ssm-code;
+ default "PRC";
+ description
+ "The parameter contains the list of SyncE acceptable SSM quality levels.";
+ }
+
+ leaf ssm-timeout {
+ type uint16;
+ description
+ "The parameter contains the value of maximum duration in seconds for which the actual SSM value may be different than configured values.";
+ }
+ list sources {
+ if-feature or-feat:PER-PORT-SYNCE-CONFIG;
+ key local-port-number;
+ description
+ "Per port synchronization SYNCE sources";
+
+ leaf local-port-number {
+ type leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,
+ where the SyncE signal is located.";
+ }
+
+ leaf ssm-send-enable{
+ type boolean;
+ default true;
+ description
+ "This parameter defines if ESMC messages with SSM quality level are sent on this port.";
+ }
+
+ leaf local-priority {
+ type uint8;
+ default 0;
+ description
+ "The parameter defines the priority of the SyncE source as per ITU-T G.781.
+ A value 0 configures a port that is not nominated for SyncE source selection.
+ The smaller the value (except 0), the higher the priority.";
+ }
+ }
+ }
+
+ 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 O-RU, 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 leafref {
+ path "/if:interfaces/if:interface/o-ran-int:port-reference/o-ran-int:port-number";
+ }
+ 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 this is the primary SyncE source recovering SyncE signal.";
+ }
+ enum OK {
+ description
+ "Indicates that this source is an alternate SyncE source, which the clock,
+ controlled by the NETCONF Server, can potentially synchronize to, when the
+ clock quality of the primary SyncE signal advertised in ESMC packets is
+ lower than the expected or configured clock quality; or when this source
+ clock's quality is better than the primary SyncE source clock quality.";
+ }
+ enum NOK {
+ description
+ "Indicates that this source is an alternate SyncE source, and the O-RU
+ has an operational connection to this alternate SyncE source, but the
+ clock's quality is not in the configured acceptable range.
+ This includes the case when DNU quality level is received on the port";
+ }
+ enum DISABLED {
+ description
+ "Indicates that this source is an alternate SyncE clock, and the O-RU has an
+ operational connection to this alternate SyncE source.
+ This applies to ports not receiving ESMC messages i.e.,
+ ports unused.";
+ }
+ }
+ description
+ "This parameter indicates status of the SyncE source";
+ }
+
+ leaf quality-level {
+ type uint8 {
+ range 0..15;
+ }
+ description
+ "This parameter contains the value of the SSM quality level code,
+ received in ESMC messages from the SyncE source.
+ If multiple clock sources are available, the O-RU can select the
+ reference clock source based on the SSM quality level.
+ Parameter not relevant when ../state = DISABLED.";
+ }
+
+ leaf enhanced-ssm-code {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "This parameter contains the value of the enhanced SSM quality level code,
+ received in ESMC messages from the SyncE source.";
+ }
+
+ leaf ssm-quality-level {
+ type ssm-code;
+ description
+ "This parameter contains human readable value of the enhanced SSM quality level,
+ received in ESMC messages from the SyncE source.";
+ }
+
+ leaf originator-synce-clock-id {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]{16}";
+ }
+ description
+ "This parameter reflects the value of sourceClockIdentity attribute in
+ Extended QL TLV messages, received from the SyncE source.
+ The string shall be formatted as an 8-octet hex value with the '0x'
+ prefix.";
+ }
+
+ leaf flag0-mixed-eec-eeec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type boolean;
+ description
+ "Mixed EEC/eEEC (i.e., TRUE if at least one of the clocks is not an eEEC; FALSE if all clocks are eEEC)";
+ }
+
+ leaf flag1-partial-chain {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type boolean;
+ description
+ "Partial chain (i.e., TRUE if the TLV has been generated in the middle of the chain and the count of the EEC/eEEC is incomplete)";
+ }
+
+ leaf number-of-eeec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "Number of cascaded eEECs from the nearest SSU/PRC/ePRC";
+ }
+
+ leaf number-of-eec {
+ when "./../../../sync-capability/extended-ql-tlv-supported = 'true'";
+ type uint8;
+ description
+ "Number of cascaded EECs from the nearest SSU/PRC/ePRC";
+ }
+ min-elements 1;
+ description
+ "This parameter contains characteristics of SyncE sources of the clock, controlled by the O-RU.";
+ }
+ }
+
+ container gnss-config {
+ if-feature GNSS;
+ description
+ "This container defines the configuration of Global Navigation Satellite System (GNSS).";
+
+ leaf enable {
+ type boolean;
+
+ description
+ "This parameter defines if GNSS receiver shall be enabled or not.";
+ }
+
+ leaf-list satellite-constelation-list {
+ type enumeration {
+ enum GPS {
+ description
+ "GPS";
+ }
+ enum GLONASS {
+ description
+ "GLONASS should not be used alone but always along with GPS or BEIDOU because of missing leap second information";
+ }
+ enum GALILEO {
+ description
+ "GALILEO";
+ }
+ enum BEIDOU {
+ description
+ "BEIDOU";
+ }
+ }
+
+ description
+ "This parameter defines list of constellations to be used to acquire synchronization.";
+ }
+
+ leaf polarity {
+ type enumeration {
+ enum POSITIVE {
+ description
+ "POSITIVE";
+ }
+ enum NEGATIVE {
+ description
+ "NEGATIVE";
+ }
+ }
+ default POSITIVE;
+
+ description
+ "This parameter defines pulse polarity";
+ }
+
+ leaf cable-delay {
+ type uint16 {
+ range "0..1000";
+ }
+ default 5;
+
+ description
+ "This parameter is used to compensate cable delay.";
+ }
+
+ leaf anti-jam-enable {
+ if-feature ANTI-JAM;
+ type boolean;
+ default false;
+ description
+ "This parameter is used to enable or disable anti-jamming.";
+ }
+ }
+
+ container gnss-status {
+ if-feature GNSS;
+ description
+ "Provides information about state of gps receiver";
+ leaf reporting-period {
+ type uint8;
+ default 10;
+ description
+ "This parameter defines minimum period in seconds between reports,
+ sent by the O-RU, for parameters in this container.";
+ }
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ config false;
+ description
+ "A name that is unique that identifies a GNSS instance.
+ This name may be used in fault management to refer to a
+ fault source or affected object";
+ }
+ leaf gnss-sync-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";
+ }
+ }
+ config false;
+ description "when available, indicates the status of the gnss receiver.";
+ }
+ container gnss-data {
+ when "../gnss-sync-status='SYNCHRONIZED'";
+ config false;
+ 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.";
+ }
+ }
+ leaf gnss-rx-time-error {
+ type decimal64 {
+ fraction-digits 3;
+ }
+ units nanoseconds;
+ description
+ "An optional leaf, representing the estimate of current GNSS receiver time error ";
+ }
+ }
+ }
+ }
+ container sync {
+ description
+ "Main containter for sync related parameters";
+
+ uses sync-group;
+ }
+
+ //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 equipment 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 equipment 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 equipment 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-status/gnss-sync-status";
+ }
+ description
+ "gnss-state-change notification is signalled from equipment at state change";
+ }
+ }
+
+}
--- /dev/null
+module o-ran-trace {
+ yang-version 1.1;
+ namespace "urn:o-ran:trace:1.0";
+ prefix "o-ran-trace";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for the trace logs.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified path/folder description.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.1.0
+
+ 1) Typographical corrections.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.0.0
+
+ 1) Initial module definition.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ grouping trace-status-grouping {
+ description "grouping used for trace 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-trace-logs {
+ description
+ "Management plane triggered to start collecting the trace logs files of O-RU.";
+ output {
+ uses trace-status-grouping;
+ }
+ }
+
+ rpc stop-trace-logs {
+ description
+ "Management plane triggered to stop collecting the trace logs files of O-RU.";
+ output {
+ uses trace-status-grouping;
+ }
+ }
+
+ notification trace-log-generated {
+ description
+ "When new log file generated, send this notification.";
+ leaf-list log-file-name {
+ type string;
+ description
+ "The list of trace log file names on the O-RU. Each record in this list is expected to contain
+ location of the file (e.g. 'o-ran/log/') and the name of file (e.g.'my_trace_log_file.zip', where
+ 'my_trace_log_file' is example file name and 'zip' is expected file name extension).
+ Example complete expected content of this node is 'o-ran/log/my_trace_log_file.zip'.";
+ }
+
+ leaf is-notification-last {
+ type boolean;
+ default false;
+ description
+ "Informs if notification is last - the one after receiving stop-trace-logs RPC.";
+ }
+ }
+}
--- /dev/null
+module o-ran-transceiver {
+ yang-version 1.1;
+ namespace "urn:o-ran:transceiver:1.0";
+ prefix "o-ran-transceiver";
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operational state data for SFP transceivers used in
+ an O-RAN Radio Unit.
+
+ Copyright 2023 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2023-04-10" {
+ description
+ "version 11.1.0
+
+ 1) Max length of vendor-rev is changed from 2 to 4";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) enable more than one interface to be accessible through a transceiver";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced new SFP compliance codes and updated references";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 2.1.0
+
+ 1) typographical corrections in descriptions
+ 2) clarifying vendor name follows SFF 8472";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+
+ revision "2019-07-03" {
+ description
+ "version 2.0.0
+
+ 1) introduction of reporting for QSFP.
+ 2) backward compatible changes to introduce groupings.";
+
+ reference "ORAN-WG4.M.0-v02.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+
+ // Groupings
+
+ grouping transceiver-group {
+ description "a transceiver grouping";
+ list port-transceiver-data {
+ key "interface-name port-number";
+ description
+ "Data recovered from port transceivers.
+ A single entry in the list is created per transceiver.";
+ leaf interface-name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Name of an interface accessible through the transceiver.
+
+ If operating with a QSFP, then the interface corresponds
+ to an interface accessible through the lane/channel 1 of the QSFP.
+
+ If more than one interface is accessible through the transceiver
+ or the lane/channel 1 of the QSFP, then O-RU arbitrarily chooses
+ the referenced interface instance.";
+ }
+
+ leaf port-number {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../interface-name]" + "/o-ran-int:port-reference/o-ran-int: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-list interface-names {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Names of all interfaces accessible through the transceiver.
+
+ If operating with a QSFP, then the interfaces correspond
+ to all interfaces accessible through the lane/channel 1 of the QSFP.
+
+ O-RU provides the values only if more than one interface is
+ accessible through the transceiver or the lane/channel 1 of the QSFP.";
+ }
+
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the O-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 transceiver 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. When used, the content of this schema node
+ follows the definition of Vendor name field in SFF-8472.";
+ }
+
+ 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. When used, the content of this schema node
+ follows the definition of Vendor PN field in SFF-8472.";
+ }
+
+ leaf vendor-rev {
+ type string {
+ length 1..4;
+ }
+ config false;
+ description
+ "Transceiver vendors revision number. 2-octet (QSFP) or 4-octet (SFP)
+ field that contains ASCII characters.
+
+ Optional node included when the NETCONF Server has determined
+ the vendor revision number. When used, the content of this schema
+ node follows the definition of Vendor Rev field in SFF-8472.";
+ }
+
+ 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{
+ status deprecated;
+ description
+ "diagnostics published 08-28-14
+ Note: Deprecated as it does not exists in SFF-8472 v12.4";
+ }
+ enum rev10.4-diagnostics{
+ description "diagnostics published 30-01-09";
+ }
+ enum rev12.3-diagnostics{
+ description "diagnostics published 29-07-18";
+ }
+ enum rev12.4-diagnostics{
+ description "diagnostics published 31-03-21";
+ }
+ }
+ config false;
+ description
+ "Indication of which feature set(s) are
+ implemented in the transceiver from Byte 94 of address A0h
+ https://members.snia.org/document/dl/25916 v12.4
+
+ Optional node included when the NETCONF Server has determined
+ the compliance code.";
+
+ reference "https://members.snia.org/document/dl/25916";
+ }
+
+ 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.
+
+ Optional node included when the NETCONF Server has determined
+ the connector type.";
+ reference "https://ta.snia.org/higherlogic/ws/public/document?document_id=944";
+ }
+
+ leaf identifier {
+ type enumeration {
+ enum unknown {
+ description "encoded as 00h in Table 4-1 of SFF-8024";
+ }
+ enum gbic {
+ description "encoded as 01h in Table 4-1 of SFF-8024";
+ }
+ enum soldered {
+ description "encoded as 02h in Table 4-1 of SFF-8024";
+ }
+ enum sfp {
+ description "encoded as 03h in Table 4-1 of SFF-8024";
+ }
+ enum xbi {
+ description "encoded as 04h in Table 4-1 of SFF-8024";
+ }
+ enum xenpack {
+ description "encoded as 05h in Table 4-1 of SFF-8024";
+ }
+ enum xfp {
+ description "encoded as 06h in Table 4-1 of SFF-8024";
+ }
+ enum xff {
+ description "encoded as 07h in Table 4-1 of SFF-8024";
+ }
+ enum xfp-e {
+ description "encoded as 08h in Table 4-1 of SFF-8024";
+ }
+ enum xpak {
+ description "encoded as 09h in Table 4-1 of SFF-8024";
+ }
+ enum x2 {
+ description "encoded as 0Ah in Table 4-1 of SFF-8024";
+ }
+ enum dwdm-sfp {
+ description "encoded as 0Bh in Table 4-1 of SFF-8024";
+ }
+ enum qsfp {
+ description "encoded as 0Ch in Table 4-1 of SFF-8024";
+ }
+ enum qsfp+ {
+ description "encoded as 0Dh in Table 4-1 of SFF-8024";
+ }
+ }
+ config false;
+ description
+ "Connector identifier as defined in the identifier
+ types derived from table 4-1 in SFF-8024.
+
+ Optional node included when the NETCONF Server has determined
+ the identifier type.";
+ reference "https://members.snia.org/document/dl/26423";
+ }
+
+ 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 the 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
+ "Received power measurement type
+ oma = optical modulation amplitude
+ avp = average power
+
+ Optional node included when the NETCONF Server has determined
+ the rx power type.";
+ }
+
+ 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.
+
+ If operating with QSFP, this power corresponds to that of
+ Lane/Channel 1.";
+ }
+
+ 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.
+
+ If operating with QSFP, this bias current corresponds to that of
+ Lane/Channel 1.";
+ }
+
+ 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 Celsius.
+
+ Optional node included when the NETCONF Server has determined
+ the temperature.";
+ }
+
+ list additional-multi-lane-reporting {
+ when "(../identifier ='qsfp')or(../identifier ='qsfp+')";
+ key lane;
+ config false;
+ description
+ "Additional reporting according to SFF8436 which specifies real time
+ channel monitoring for each transmit and receive channel and includes
+ optical input power and Tx bias current. ";
+
+ leaf lane {
+ type uint8 {
+ range "2..4";
+ }
+ description
+ "the specific lane/channel associated with the report parameters";
+ }
+ leaf-list interface-names {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Names of all interfaces accessible through a particular lane/channel.";
+ }
+ 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 for a particular lane/channel
+ - see tabel 7-10 of SFF-8636.";
+ }
+ 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 for a particular lane/channel
+ - see tabel 7-10 of SFF-8636.";
+ }
+ 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 or a particular lane/channel
+ - see tabel 7010 of SFF-8636.";
+ }
+ }
+ }
+
+ }
+
+ // Top Level Container
+
+ 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)";
+
+ uses transceiver-group;
+ }
+}
--- /dev/null
+module o-ran-troubleshooting {
+ yang-version 1.1;
+ namespace "urn:o-ran:troubleshooting:1.0";
+ prefix "o-ran-trblsht";
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the operations for the troubleshooting logs.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2022-08-15" {
+ description
+ "version 1.2.0
+
+ 1) clarified path/folder description.";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 1.1.0
+
+ 1) typographical corrections";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.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 O-RU.";
+ output {
+ uses troubleshooting-status-grouping;
+ }
+ }
+
+ rpc stop-troubleshooting-logs {
+ description
+ "Management plane triggered to stop collecting the troubleshooting logs files of O-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 O-RU. Each record in this list is expected to
+ contain location of the file (e.g. 'o-ran/log/') and the name of file (e.g.'my_troubleshooting_log_file.zip',
+ where 'my_troubleshooting_log_file' is example file name and 'zip' is expected file name extension).
+ Example complete expected content of this node is 'o-ran/log/my_troubleshooting_log_file.zip'.";
+ }
+ }
+}
--- /dev/null
+module o-ran-udp-echo {
+ yang-version 1.1;
+ namespace "urn:o-ran:udpecho:1.0";
+ prefix "o-ran-echo";
+
+ import o-ran-interfaces {
+ prefix "o-ran-int";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module covers off aspects of interface transport
+ verification for UDP/IP based C/U plane connections based on UDP Echo.
+
+ Copyright 2019 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+// groupings
+
+ grouping udp-echo-group {
+ description "a udp echo grouping";
+ leaf enable-udp-echo {
+ type boolean;
+ default false;
+ description
+ "whether O-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 O-RU.";
+ }
+ }
+
+ container udp-echo {
+ if-feature o-ran-int:UDPIP-BASED-CU-PLANE;
+ description "container for udp echo";
+
+ uses udp-echo-group;
+ }
+}
--- /dev/null
+module o-ran-uplane-conf {
+ yang-version 1.1;
+ namespace "urn:o-ran:uplane-conf:1.0";
+ prefix "o-ran-uplane-conf";
+
+ import o-ran-processing-element {
+ prefix "o-ran-pe";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import o-ran-module-cap {
+ prefix "mcap";
+ }
+
+ import o-ran-compression-factors {
+ prefix "cf";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import o-ran-hardware {
+ prefix "or-hw";
+ }
+
+ import o-ran-usermgmt {
+ prefix "or-user";
+ }
+
+ import o-ran-common-yang-types {
+ prefix "o-ran-cmn";
+ }
+
+ import o-ran-delay-management {
+ prefix "or-dm";
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the module capabilities for
+ the O-RAN Radio Unit U-Plane configuration.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add up-link performance improvement functionality, including DMRX-BF-EQ and DMS-BF-NEQ features
+ 2) Introduction of capabilities and configuration for SE27 O-DU controlled dimensionality reduction
+ 3) add support for se-20-multi-sd-punc-pattern
+ 4) add support for VSWR thresholds";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+
+ 1) add support for sending prgSize in SE-21 with ST 5 and ST6.
+ 2) add support for for beamforming list and delay profiles(s) per endpoint.
+ 3) add support for user-group optimization.
+ 4) add support for multiple beamid tables.
+ 5) support pass band for filterindex09 per scs.
+ 6) support for M-plane based TRX control for Network Energy Saving.
+ 7) clarified cp-type is not applicable for ST3 or ST0
+ 8) Changed description of max-beams-per-symbol/slot, so they refer to
+ 'different beamId values' instead of 'beams'
+ 9) added new leafs called max-beams-per-symbol-multiple-beamid-tables
+ and max-beams-per-slot-multiple-beamid-tables";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+
+ 1) Corrected the configurable-tdd-pattern-supported leafref to point
+ to static-low-level-tx-endpoints
+ 2) Clarify reference for supported-frame-structures
+ 3) introduce max-prb-blks-per-sec-ext-23 and se-23-prb-block-mode-supported
+ 4) Introduction of new energy saving sub-use case - Data Layer control";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+
+ 1) clarification for I/Q bitwidth parameter
+ 2) clarification of ul-fft-sampling-offset parameter
+ 3) adding availability status to carrier operational data and notifications
+ 4) ability to disable sequence number checking
+ 5) Introduction of TRX-Control and Advanced Sleep Mode for network energy savings";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+
+ 1) Typographical corrections
+ 2) NB-IoT introduction
+ 3) clarify PRACH repetitions
+ 4) support for non-scheduled-ueid
+ 5) continuity bit information in Section Extension 11
+ 6) U-Plane Processing Limits";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+
+ 1) PRB range limit for SE 12 and HP section
+ 2) Introduction of PRB ranges
+ 3) uplane-only-dl-mode-enable
+ 4) Deprecation of power-related capabilities and addition of min-gain
+ 5) se 23 max mplane limits
+ 6) support Section Type 4 and associated commands";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) clarified description statements for representative-t/rx-eaxc-id
+ 2) clarified description statements for max-num-t/rx-eaxc-ids-per-group
+ 4) clarified description statements for component carrier
+ 5) style guide corrections
+ 6) introduction of O-RU connector functionality
+ 7) fixing constraints
+ 8) introducing new feature for ACK NACK feedback
+ 9) added SHARED-ORU-MULTI-OPERATOR anf SHARED-ORU-MULTI-ODU features";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-04-18" {
+ description
+ "version 9.0.0
+
+ 1) Descriptions fixed for max-beam-updates-per-slot / max-beam-updates-per-slot
+ 2) Added references to CUS-Plane spec for parameters 'frame-structure' and
+ 'supported-frame-structures'
+ 3) clarified max-beams-per-symbol, max-beams-per-slot, max-beam-updates-per-slot,
+ max-beam-updates-per-symbol parameters
+ 4) Clarification of cp-length and cp-length-other
+ 5) deprecation of rw-type and rw-duplex-scheme";
+
+ reference "ORAN-WG4.M.0-v09.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+
+ 1) Various descriptions corrected and/or clarified
+ 2) Configuration for Beamforming weights were added together with changes and updates to compressions
+ 3) Added new leaf node 'beam-update-contention-control-limits-required' to 'endpoint-types'
+ to indicate endpoint capability to support beam update contention control processing limits.
+ 4) Added instance of 'beam-update-contention-control-limits' to 'endpoint-types'.
+ 5) Added new leaf node boolean flag 'beam-update-contention-control-enabled' for O-DU to indicate
+ support of feature BEAM-UPDATE-CONTENTION-CONTROL feature.
+ 6) deprecate 'channel-information-iq-bitwidth' , and define a new parameter
+ 'channel-information-bitwidth' under the container 'compression'
+ 7) add capability and configuration for channel information PRB granularity.
+ 8) Add support for multiple transport-session-type per O-RU.
+ 9) add capability and configuration for channel information compression.
+ 10) deprecate 'channel-information-iq-bitwidth' , and define a new parameter
+ 'channel-information-bitwidth' under the container 'compression'";
+
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ 1) Added new grouping 'per-cplane-message-limits' containing params to limit
+ per C-Plane packet processing when CPLANE-MESSAGE-PROCESSING-LIMITS feature is
+ supported by O-RU and used by O-DU.
+ 2) Added new leaf node 'cplane-message-processing-limits-required' to 'endpoint-types'
+ to indicate endpoint capability to support C-Plane message processing limits.
+ 3) Added instances of 'per-cplane-message-limits' to 'endpoint-types' and
+ 'endpoint-capacity-sharing-groups'.
+ 4) Added new leaf node to low-level-tx/rx-endpoint 'cplane-message-processing-limits-enabled'
+ for O-DU to configure support for C-Plane limits
+ 5) Added t-da-offset and t-au-offset for external antenna support
+ 6) Added Channel IQ bitwidth for ST6
+ 7) Added ordered-by user to leaf-list member-tx-eaxc-id and leaf-list member-rx-eaxc-id
+ 8) Added new PRACH formats
+ 9) Ensuring beam-ids can only be 15 bits
+ 10) Clarify mixed numerology restrictions";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) typographical corrections in descriptions.
+ 2) Updates to transmission window control.
+ 3) Introduces to existing grouping 'endpoint-section-capacity' two new leaf nodes 'max-uplane-section-header-per-symbol' and
+ 'max-uplane-section-header-per-slot' to limit U-Plane data section header addition/parsing.
+ 4) deprecated parameter 'max-remasks-per-section-id' since it is duplicate of leaf node 'max-control-sections-per-data-section'.
+ 5) introduces new leaf nodes 'max-beams-updates-per-slot' and ''max-beams-updates-per-symbol'
+ to grouping 'endpoint-beam-capacity'
+ 6) added new SRS features:
+ STATIC-TRANSMISSION-WINDOW-CONTROL
+ DYNAMIC-TRANSMISSION-WINDOW-CONTROL
+ UNIFORMLY-DISTRIBUTED-TRANSMISSION
+ ORDERED-TRANSMISSION
+ INDEPENDENT-TRANSMISSION-WINDOW-CONTROL";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) introduces new coupling method coupling-via-frequency-and-time-with-priorities-optimized
+ 2) introduces new max-highest-priority-sections-per-slot parameter";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ revision "2020-08-10" {
+ description
+ "version 4.0.0
+
+ 1) parameters allowing for static PRACH configuration introduced
+ 2) parameters allowing for static SRS configuration introduced
+ 3) parameters allowing for configuration of TDD pattern introduced
+ 4) Backward compatible change to introduce new parameter 'coupling-method' related
+ to Section Description Priority to serve for CUS-Plane CR";
+
+ reference "ORAN-WG4.M.0-v04.00";
+ }
+
+ revision "2020-04-17" {
+ description
+ "version 3.0.0
+
+ 1) Adding optional little endian support
+ 2) Adding a new capability parameter to indicate that the O-RU
+ supports regularizationFactor in section type 5
+ 3) Added support for Dynamic Spectrum Sharing feature
+ 4) Clarify the supported number of reMasks in RU side
+ 5) Section extension for grouping multiple ports
+ 6) adding PRACH formats to endpoint capabilities";
+
+ reference "ORAN-WG4.M.0-v03.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) added new leaf multiple-numerology-supported to enable O-RU to report
+ whether it supports multiple numerologies.
+
+ 2) fixing broken constraints (configuration cannot be dependent on
+ operational state). This is a backwards incompatible revision.
+
+ As these constraints only apply when the LAA feature is used, and also
+ when considering the limited number of implementation that need to be
+ taken into consideration for backwards compatibility, it has been
+ agreed to NOT increment the namespace integer.
+
+ 3) added frequency related capabilities for tx-arrays and rx-array
+
+ 4) removed redundant LAA import";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ feature EAXC-GAIN-CORRECTION {
+ description
+ "Presence of feature indicates that O-RU supports eAxC specific gain correction.";
+ }
+
+ feature TX-REFERENCE-LEVEL {
+ description
+ "Presence of feature indicates that O-RU supports TX gain reference level control";
+ }
+
+ typedef prach-preamble-format {
+ type enumeration {
+ enum LTE-0 {
+ description
+ "LTE PRACH Preamble format 0";
+ }
+ enum LTE-1 {
+ description
+ "LTE PRACH Preamble format 1";
+ }
+ enum LTE-2 {
+ description
+ "LTE PRACH Preamble format 2";
+ }
+ enum LTE-3 {
+ description
+ "LTE PRACH Preamble format 3";
+ }
+ enum LTE-4 {
+ description
+ "LTE PRACH Preamble format 4";
+ }
+ enum LTE-NB0 {
+ description
+ "LTE Narrowband PRACH format 0";
+ }
+ enum LTE-NB1 {
+ description
+ "LTE Narrowband PRACH format 1";
+ }
+ enum NR-0 {
+ description
+ "5GNR PRACH Preamble format 0";
+ }
+ enum NR-1 {
+ description
+ "5GNR PRACH Preamble format 1";
+ }
+ enum NR-2 {
+ description
+ "5GNR PRACH Preamble format 2";
+ }
+ enum NR-3 {
+ description
+ "5GNR PRACH Preamble format 3";
+ }
+ enum NR-A1 {
+ description
+ "5GNR PRACH Preamble format A1";
+ }
+ enum NR-A2 {
+ description
+ "5GNR PRACH Preamble format A2";
+ }
+ enum NR-A3 {
+ description
+ "5GNR PRACH Preamble format A3";
+ }
+ enum NR-B1 {
+ description
+ "5GNR PRACH Preamble format B1";
+ }
+ enum NR-B2 {
+ description
+ "5GNR PRACH Preamble format B2";
+ }
+ enum NR-B3 {
+ description
+ "5GNR PRACH Preamble format B3";
+ }
+ enum NR-B4 {
+ description
+ "5GNR PRACH Preamble format B4";
+ }
+ enum NR-C0 {
+ description
+ "5GNR PRACH Preamble format C0";
+ }
+ enum NR-C2 {
+ description
+ "5GNR PRACH Preamble format C2";
+ }
+ enum LTE-NB0-a {
+ description
+ "LTE Narrowband PRACH format 0-a";
+ }
+ enum LTE-NB1-a {
+ description
+ "LTE Narrowband PRACH format 1-a";
+ }
+ enum LTE-NB2 {
+ description
+ "LTE Narrowband PRACH format 2";
+ }
+ }
+
+ description
+ "PRACH preamble format definition";
+ }
+
+ typedef polarisation_type {
+ type enumeration {
+ enum MINUS_45 {
+ description "MINUS_45";
+ }
+ enum ZERO {
+ description "ZERO";
+ }
+ enum PLUS_45 {
+ description "PLUS_45";
+ }
+ enum PLUS_90 {
+ description "PLUS_90";
+ }
+ }
+ description "Type definition for polarisations";
+ }
+
+ typedef beamforming-method-type {
+ type enumeration {
+ enum NOBF {
+ description
+ "No beamforming.";
+ }
+ enum PDBF {
+ description
+ "Predefined-beam beamforming.";
+ }
+ enum WDBF {
+ description
+ "Weight-based dynamic beamforming (based on real-time-updated weights).";
+ }
+ enum ABBF {
+ description
+ "Attribute-based dynamic beamforming (based on real-time-updated beam attributes).";
+ }
+ enum CIBF {
+ description
+ "Channel-information-based beamforming.";
+ }
+ enum DMRS_BF_EQ {
+ description
+ "DMRS-based beamforming with equalization.";
+ }
+ enum DMRS_BF_NEQ {
+ description
+ "DMRS-based beamforming without equalization.";
+ }
+ }
+ description
+ "Type definition for beamforming method.";
+ }
+
+ typedef symb-reorder-capability {
+ type enumeration {
+ enum PER-TX-WIN-SYMB-REORDER-WITH-DMRS-SENDING {
+ description
+ "per-window symbol reordering when sending of port-reduced DMRS data is enabled,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-TX-WIN-SYMB-REORDER-WITHOUT-DMRS-SENDING {
+ description
+ "per-window symbol reordering when sending of port-reduced DMRS data is not enabled,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-SECTION-TX-WINDOW-REASSIGNMENT {
+ description
+ "per-section tx-window reassignment, please refer to clause 7.7.25.3 of the CUS-Plane
+ Specification.";
+ }
+ }
+ description
+ "Type definition for symbol reordering method supported.";
+ }
+ typedef symb-reorder-method {
+ type enumeration {
+ enum PER-TX-WIN-SYMB-REORDERG {
+ description
+ "per-window symbol reordering,
+ please refer to clause 7.7.25.2 of the CUS-Plane Specification.";
+ }
+ enum PER-SECTION-TX-WINDOW-REASSIGNMENT {
+ description
+ "per-section tx-window reassignment, please refer to clause 7.7.25.3 of the CUS-Plane
+ Specification.";
+ }
+ }
+ description
+ "Type definition for symbol reordering method configured.";
+ }
+ typedef up-SymbolId-type {
+ type enumeration {
+ enum OVER-AIR-SYMBOL-NUMBER {
+ description
+ "U-plane symbol Id interpretation as on-air symbol number for symbol reordering.";
+ }
+ enum TRANSMISSION-WINDOW-NUMBER {
+ description
+ "U-plane symbol Id interpretation as transmission window number for symbol reordering.";
+ }
+ }
+ description
+ "Type definition for symbol reordering symbol Id interpretation capability.";
+ }
+
+ typedef user-group-self-assembly-mode {
+ type enumeration {
+ enum SELF-ASSEMBLY-WITH-GROUP-ID {
+ description
+ "The mode in which the O-RU is capable of assembling user groups using 'usrGroupId' and
+ 'usrGroupSize' fields in SE-24.";
+ }
+ enum SELF-ASSEMBLY-WITHOUT-GROUP-ID {
+ description
+ "The mode in which O-RU is capable of assembling user groups without using 'usrGroupId' and 'usrGroupSize'
+ fields in SE-24, but instead relying on PRB ranges of all UE layers overall all section for assembling
+ user groups.";
+ }
+ }
+ description
+ "Possible values for user group self assembly modes that the O-RU can support.";
+ }
+
+ typedef rrm-meas-types {
+ type enumeration {
+ enum MEAS-UE-TAE {
+ value 0;
+ description
+ "UE timing advance error per UE, per slot";
+ }
+ enum MEAS-UE-LAYER-POWER {
+ value 1;
+ description
+ "UE layer signal power per layer,per slot";
+ }
+ enum MEAS-UE-FREQ-OFFSET {
+ value 2;
+ description
+ "UE frequency offset per UE, per slot";
+ }
+ enum MEAS-IPN-ALLOC {
+ value 3;
+ description
+ "Interference plus Noise for allocated PRBs,per slot or per DMRS symbol group";
+ }
+ enum MEAS-IPN-UNALLOC {
+ value 4;
+ description
+ "Interference plus Noise for unallocated PRBs, per slot or per set of symbols in a slot";
+ }
+ enum MEAS-ANT-DMRS-SNR {
+ value 5;
+ description
+ "DMRS Signal to Noise Ratio per antenna, per layer. ";
+ }
+ }
+ description
+ "RRM measurement types, refer to CUS spec table 9.2.1-1 for details";
+ }
+
+ grouping transmission-buffering-capacity {
+ description
+ "UL U-plane buffering capacity available for scheduled transmission of UL U-plane messages";
+
+ list transmission-buffering-capacity {
+ description
+ "Buffering capacity for specific IQ format.
+ If the list does not contain an entry for particular IQ format than endpoint
+ or group of endpoints then buffering capacity for this IQ format is
+ max-buffered-prbs = 0 and max-buffered-symbols = 0.";
+
+ uses cf:compression-details;
+
+ leaf max-buffered-prbs {
+ type uint32;
+ description
+ "Max number of PRBs (for IQ format given in compression-details) that can be buffered by an endpoint
+ or buffered collectively by group of endpoints sharing capacity. This is divided between symbols buffered";
+ }
+
+ leaf max-buffered-symbols {
+ type uint32;
+ description
+ "Max number of symbols (for IQ format given in compression-details) that can be buffered by an endpoint
+ or buffered collectively by group of endpoints sharing capacity";
+ }
+ }
+ }
+
+ grouping mplane-trx-control-supp-antenna-masks {
+ description
+ "A grouping containing list of antenna masks supported by the O-RU";
+
+ list mplane-supported-trx-control-masks {
+ key "index";
+ description
+ "List of supported M-Plane controlled TRX control masks.";
+
+ leaf index {
+ type uint8;
+ description
+ "Index to the list of antenna masks";
+ }
+
+ leaf antenna-mask {
+ type binary;
+ description
+ "M-Plane controlled O-RU supported antenna mask value.";
+ }
+ }
+ }
+ grouping array-config-group {
+ description
+ "This group represents configuration for supported arrays,
+ e.g. mplane trx control mask for supported arrayes";
+
+ list tx-array-antenna-mask-config {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ key array-name;
+ description
+ "List of mplane configured trx antenna mask for supported arrays";
+
+ leaf array-name {
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ require-instance false;
+ }
+ description
+ "Unique name of tx-array. ";
+ }
+ leaf antenna-bitmask {
+ type binary;
+ description
+ "If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,parameter antenna-bitmask may be used for configuration.
+ The parameter antenna-bitmask-index shall not be used for configuration.
+ The antenna mask contains as many binary values as number of array elements associated
+ with respective tx or rx-array. Value of '1' indicates antenna element shall be
+ kept active and value of '0' indicates antenna element should be turned inactive.
+ Refer clause 20.3.2 of M-Plane specification.";
+ }
+ leaf antenna-bitmask-index {
+ type uint8;
+ description
+ "If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index may be used for configuration to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for configuration.";
+ }
+ }
+ list rx-array-antenna-mask-config {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ key array-name;
+ description
+ "List of mplane configured trx antenna mask for supported arrays";
+ leaf array-name {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ require-instance false;
+ }
+ description
+ "Unique name of rx-array. ";
+ }
+
+ leaf antenna-bitmask {
+ type binary;
+ description
+ "If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,parameter antenna-bitmask may be used for configuration.
+ The parameter antenna-bitmask-index shall not be used for configuration.
+ The antenna mask contains as many binary values as number of array elements associated
+ with respective tx or rx-array. Value of '1' indicates antenna element shall be
+ kept active and value of '0' indicates antenna element should be turned inactive.
+ Refer clause 20.3.2 of M-Plane specification.";
+ }
+ leaf antenna-bitmask-index {
+ type uint8;
+ description
+ "If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index may be used for configuration to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for configuration.";
+ }
+ }
+ }
+
+ grouping general-config {
+ description "a group for general configuration";
+
+ container general-config {
+ description "a container for general configuration";
+
+ leaf regularization-factor-se-configured {
+ type boolean;
+ default false;
+ description
+ "Informs if regularization factor in section extension is configured(true) or not(false), this
+ leaf indicates whether the O-DU will send the regularization factor in section extension.
+
+ If the O-RU does not support regularization-factor-se-supported in o-ran-module-cap.yang,
+ this leaf is ignored.";
+ }
+
+ leaf little-endian-byte-order {
+ type boolean;
+ default false;
+
+ description
+ "If little endian byte order for C/U plane data flows is supported by
+ the O-RU, indicates if the O-RU should use little endian byte order
+ for all UL and DL C/U plane data flows.
+
+ If little endian byte order is NOT supported, this node is ignored
+ (and the default big endian byte order used)";
+ }
+
+ leaf uplane-only-dl-mode-enable {
+ if-feature feat:UPLANE-ONLY-DL-MODE;
+ type boolean;
+ default false;
+ description
+ "If set to true, enable IQ data transfer without C-Plane in DL for all
+ endpoints as specified in the CUS specification clause 8.2.2.";
+ }
+
+ leaf st4-for-time-domain-beamforming-weights-enabled {
+ if-feature feat:ST4-SLOT-CONFIG-MSG-SUPPORT;
+ type boolean;
+ default false;
+ description
+ "If O-RU indicates support for Section Type 4 command 'TIME_DOMAIN_BEAM_CONFIG' , O-DU may
+ configure the O-RU to use Section Type 4 TIME_DOMAIN_BEAM_CONFIG command by setting this
+ flag to 'true'. In which case, O-DU shall use only Section Type 4 TIME_DOMAIN_BEAM_CONFIG
+ for specifying time-domain beam information. refer to clause 12.4.3.4.4 of CUS-Plane spec.";
+ }
+
+ leaf seq-id-checking-disabled {
+ if-feature feat:SEQ-ID-CHECKING-CONFIGURABLE;
+ type boolean;
+ default false;
+ description
+ "When the parameter has value true, sequence number checking is disabled.";
+ }
+
+ leaf multiple-beamId-tables-support-enabled {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type boolean;
+ default false;
+ description
+ "When the parameter has value true, O-DU will be able to use multiple beamId table capability of O-RU.
+ O-DU shall be able to associate specific [tr]x-array-carrier with specific beamId table indexes advertised
+ which are advertised in 'tx-array-beamId-table-indexes/rx-array-beamId-table-indexes' as part of tx-array
+ and rx-array capabilities.";
+ }
+
+ leaf-list energy-sharing-groups-disabled {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "A list that indicates which energy sharing groups are currently switched off due to data layer control energy saving.
+ By default this list is empty and means that no data layer control energy saving is currently ongoing.
+ This value shall be specific values from the list of 'energy-sharing-group-id' advertised by O-RU
+ inside respective static-low-level-[tr]x-endpoints.";
+ }
+
+ leaf config-symb-reorder-method {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type symb-reorder-method;
+ description
+ "Indicated which symbol reordering method is used. If it's not configured, O-RU shall
+ operate with natural order.";
+ }
+ leaf config-symb-reorder-upSymbId-type {
+ when "../config-symb-reorder-method = 'PER-TX-WIN-SYMB-REORDERG'";
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type leafref {
+ path "../../endpoint-types/supported-symb-reorder-capabilities/up-symbolId-type-supported";
+ require-instance false;
+ }
+ description
+ "Indicated which config-symb-reorder-upSymbId-type intended to be used for symbol reordering,
+ i.e. either 'on-air symbol number' or 'transmission window number' to the O-RU.
+ When 'per-section tx-window reassignment' method is used,
+ the U-Plane symbolId interpretation shall be configured as 'on-air symbol number'
+ Please refer to clause 7.7.25 in CUS plane for details.";
+ }
+
+ leaf ueid-persistence-enabled {
+ if-feature feat:UEID-PERSISTENCE;
+ type boolean;
+ description
+ "Indicates if ueId persistance over multiple slots is enabled.
+ See CUS-Plane clause 7.7.24.10.";
+ }
+
+ leaf ueid-layer-bits-configured {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type uint8;
+ description
+ "This parameter specified the number of bits configured by the O-DU for specifying ueid layers.";
+ }
+
+ container vswr-thresholds{
+ if-feature feat:CONFIGURABLE-VSWR-THRESHOLDS;
+ description "VSWR thresholds parameters.";
+ container default-vswr-thresholds {
+ config false;
+ leaf default-vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "Default VSWR minor threshold.";
+ }
+ leaf default-vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "Default VSWR major threshold.";
+ }
+ description
+ "Default VSWR thresholds used by this O-RU";
+ }
+ container vswr-thresholds-range {
+ config false;
+ leaf min {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "The lowest allowed VSWR threshold";
+ }
+ leaf max {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "The highest allowed VSWR threshold";
+ }
+ description
+ "VSWR thresholds shall be configured within this range";
+ }
+ container configurable-vswr-thresholds{
+ description "vswr monitoring parameters to be configured by O-RU Controller";
+ leaf global-vswr-monitoring-trigger-power {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "Power threshold for enabling VSWR monitoring.";
+ }
+ leaf global-vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR minor threshold which will be used to trigger an alarm.";
+ }
+ leaf global-vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR major threshold which will be used to trigger an alarm.";
+ }
+ list vswr-threshold-per-tx-array-element {
+ key "tx-array-name array-element";
+ description
+ "individual vswr-thresholds configuration which will be applied to each tx array element";
+ leaf tx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:tx-arrays/o-ran-uplane-conf:name";
+ require-instance false;
+ }
+ description
+ "tx-array where the configured vswr thresholds will be applied";
+ }
+ leaf array-element {
+ type uint16;
+ description
+ "the array-element number of the tx-array if there are multiple array-elements of the tx-array.";
+ }
+ leaf vswr-minor-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR minor threshold of the tx-array-element which will be used to trigger an alarm.
+ It shall override the configured global-vswr-minor-tresholds.";
+ }
+ leaf vswr-major-threshold {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ description
+ "configured VSWR major threshold of the tx-array-element which will be used to trigger an alarm.
+ It shall override the configured global-vswr-major-tresholds.";
+ }
+ leaf vswr-monitoring-trigger-power {
+ type decimal64 {
+ fraction-digits 1;
+ }
+ units dBm;
+ description
+ "Power threshold for enabling VSWR monitoring.
+ it shall override the configured global-vswr-monitoring-trigger-power.";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ grouping laa-carrier-config {
+ description "Carrier Configuration for support of LAA. ";
+ leaf ed-threshold-pdsch {
+ type int8;
+ units dBm;
+ description
+ "This value indicates Energy Detection(ED) threshold for LBT for PDSCH and for measurements in dBm.";
+ }
+
+ leaf ed-threshold-drs {
+ type int8;
+ units dBm;
+ description
+ "This value indicates Energy Detection(ED) threshold for LBT for DRS in dBm.";
+ }
+
+ leaf tx-antenna-ports {
+ type uint8;
+ description
+ "This value indicates Tx antenna ports for DRS (1, 2, 4)";
+ }
+
+ leaf transmission-power-for-drs {
+ type int8;
+ units decibels;
+ description
+ "This value indicates offset of Cell specific reference Signal(CRS) power to reference signal power (dB).
+ DRS signal consists of CRS, PSS, SSS, and optionally CSI-RS.";
+ }
+
+ leaf dmtc-period {
+ type enumeration {
+ enum FORTY {
+ description
+ "40 ms";
+ }
+ enum EIGHTY {
+ description
+ "80 ms";
+ }
+ enum ONE-HUNDRED-SIXTY {
+ description
+ "160 ms";
+ }
+ }
+ units milliseconds;
+ description
+ "This value indicates DRS measurement timing configuration (DMTC) period in ms";
+ }
+
+ leaf dmtc-offset {
+ type uint8;
+ units subframes;
+ description
+ "This value indicates dmtc offset in Subframes.";
+ }
+
+ leaf lbt-timer {
+ type uint16;
+ units milliseconds;
+ description
+ "This value indicates LBT Timer in milliseconds.";
+ }
+
+ list max-cw-usage-counter {
+ when "/mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-self-configure = 'true'";
+ key "priority";
+ description "";
+ leaf priority {
+ type enumeration {
+ enum P1 {
+ description "priority 1";
+ }
+ enum P2 {
+ description "priority 2";
+ }
+ enum P3 {
+ description "priority 3";
+ }
+ enum P4 {
+ description "priority 4";
+ }
+ }
+ description "This value provides the priority class traffic for which the counter is calculated.";
+ }
+
+ leaf counter-value {
+ type uint8 {
+ range "1..8";
+ }
+ description "This value indicates the maximum value of counter
+ which shows how many max congestion window value is used for backoff
+ number of priority class traffic. This value is defined at 3GPP 36.213
+ section 15.1.3 as K.";
+ }
+ }
+ }
+
+ grouping coupling-methods {
+ description
+ "Grouping for configuration of desired C-Plane / U-Plane coupling methods (if supported)";
+ leaf coupling-to {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:coupling-methods/mcap:coupling-via-frequency-and-time";
+ require-instance false;
+ }
+
+ description
+ "RW instance of RO parameter.";
+ }
+ leaf coupling-method {
+ when "../coupling-to = 'true'";
+ type enumeration{
+ enum NORMAL {
+ description "Coupling via sectionId value. This value can be used always.";
+ }
+ enum FREQUENCY_AND_TIME {
+ description "Coupling via frequency and time. Can be used when coupling-via-frequency-and-time = true
+ or coupling-via-frequency-and-time-with-priorities = true in o-ran-module-cap.yang";
+ }
+ enum FREQUENCY_AND_TIME_WITH_PRIORITIES {
+ description "Coupling via frequency and time with priorities. Can be used when
+ coupling-via-frequency-and-time-with-priorities = true in o-ran-module-cap.yang";
+ }
+ enum FREQUENCY_AND_TIME_WITH_PRIORITIES_OPTIMIZED {
+ description "Coupling via frequency and time with priorities optimized. Can be used when
+ coupling-via-frequency-and-time-with-priorities-optimized = true in o-ran-module-cap.yang";
+ }
+ }
+ default NORMAL;
+ description
+ "Method of coupling between C-Plane and U-Plane messages; see methods of coupling
+ of C-Plane and U-Plane in CUS-Plane specification. If an O-RU doesn't support the
+ necessary capability as defined in o-ran-module-cap.yang, the O-RU shall respond
+ with rpc-error including an error-message describing the error condition";
+ }
+ }
+
+ 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:
+ * O_DU_Port_ID: Used to differentiate processing units at O-DU
+ * BandSector_ID: Aggregated cell identifier
+ * CC_ID: distinguishes Component Carriers
+ * RU_Port_ID: Used to differentiate spatial streams or beams on the O-RU
+
+ The bitwidth of each of the above fields is variable this model is supposed to check
+ if we are occupying bits continuously, but we do not have to occupy all 16 bits";
+
+
+ leaf o-du-port-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode O-DU 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 O-RU Port ID";
+ }
+
+ leaf eaxc-id {
+ type uint16;
+ mandatory true;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ grouping parameters {
+ description
+ "Grouping of all parameters common between UL and DL";
+
+ leaf name {
+ type string;
+ mandatory true;
+ description "Unique name of array antenna";
+ }
+
+ leaf number-of-rows {
+ type uint16;
+ mandatory true;
+ description "Number of rows array elements are shaped into - M";
+ }
+
+ leaf number-of-columns {
+ type uint16;
+ mandatory true;
+ description "Number of columns array elements are shaped into - N";
+ }
+
+ leaf number-of-array-layers {
+ type uint8;
+ mandatory true;
+ description "Number of array layers array elements are shaped into - Q";
+ }
+
+ leaf horizontal-spacing {
+ type decimal64 {
+ fraction-digits 5;
+ }
+ units Meter;
+
+ description "Average distance between centres of nearby AE in horizontal direction (in array coordinates system)";
+ }
+
+ leaf vertical-spacing{
+ type decimal64 {
+ fraction-digits 5;
+ }
+ units Meter;
+
+ description "Average distance between centres of nearby AE in vertical direction (in array coordinates system)";
+ }
+
+ container normal-vector-direction {
+ description
+ "Counter-clockwise rotation around z and y axis.";
+
+ leaf azimuth-angle{
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Degrees;
+
+ description "Azimuth angle, counter-clockwise rotation around z-axis. Value 'zero' points to broad-side, value '90' points to y-axis";
+ }
+ leaf zenith-angle{
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Degrees;
+
+ description "Zenith angle, counter-clockwise rotation around y-axis. Value 'zero' points to zenith, value '90' points to horizon";
+ }
+ }
+
+ container leftmost-bottom-array-element-position {
+ description "Structure describing position of leftmost, bottom array element.";
+ leaf x {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "X dimension of position of leftmost, bottom array element";
+ }
+
+ leaf y {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "Y dimension of position of leftmost, bottom array element";
+ }
+
+ leaf z {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units Meter;
+
+ description "Z dimension of position of leftmost, bottom array element";
+ }
+ }
+ list polarisations {
+ key "p";
+ min-elements 1;
+ max-elements 2;
+
+ description
+ "List of supported polarisations.";
+
+ leaf p {
+ type uint8;
+ mandatory true;
+ description
+ "Polarisation index. See CUS-plane";
+ }
+
+ leaf polarisation {
+ type polarisation_type;
+ mandatory true;
+ description "Type of polarisation supported by array.";
+ }
+ }
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ mandatory true;
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multiband solutions.";
+ }
+
+ list related-o-ru-connectors {
+ key name;
+
+ leaf name {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ must "derived-from-or-self(deref(current())/../hw:class, 'or-hw:O-RU-ANTENNA-CONNECTOR')";
+ description
+ "Referenced name of O-RU connector used by the antenna array.";
+ }
+ leaf-list array-element-id {
+ type uint16;
+ description
+ "Identifiers of array element(s) related to specific O-RU connector. Allowed values and semantic - as per CUS-Plane spec, clause 'Identification and Ordering of Array Elements'";
+ }
+ description
+ "List of unique names that identify instances of O-RU's connectors the external [tr]x-array is reachable through.";
+ }
+ }
+
+ grouping array-choice {
+ choice antenna-type {
+ case tx {
+ leaf tx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:tx-arrays/o-ran-uplane-conf:name";
+ }
+
+ description
+ "Leafref to tx array if such is chosen";
+ }
+ }
+ case rx {
+ leaf rx-array-name {
+ type leafref {
+ path "/o-ran-uplane-conf:user-plane-configuration/o-ran-uplane-conf:rx-arrays/o-ran-uplane-conf:name";
+ }
+
+ description
+ "Leafref to rx array if such is chosen";
+ }
+ }
+ description
+ "Choice for antenna type";
+ }
+ description
+ "Elements which groups choice for antenna type";
+ }
+
+ grouping scs-config {
+ description
+ "It groups all parameters related to SCS configuration";
+
+ leaf frame-structure {
+ type uint8;
+
+ description
+ "This parameter provides value of frame structure. For semantics and allowed values see CUS-Plane Specification, clause 'frameStructure (frame structure)'";
+ }
+
+ leaf cp-type {
+ type enumeration {
+ enum NORMAL {
+ description
+ "Normal cyclic prefix";
+ }
+
+ enum EXTENDED {
+ description
+ "Extended cyclic prefix";
+ }
+ }
+
+ description
+ "Provides type of CP (cyclic prefix).
+
+ For section type 3 or section type 0, element and the value of this leaf shall be ignored by the O-RU. In such circumstances,
+ please refer to clause 7.5.2.14 cpLength (cyclic prefix length) of the CUS-Plane Specification.";
+ }
+
+ leaf cp-length {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Provides length of CP used for the first symbol after subframe boundary or half-subframe boundary.
+ See CUS-plane
+
+ If a section type 3 is used in C-plane messages addressed to the endpoint, then O-RU takes length of CP from
+ C-Plane cpLength Information Element and the value of this leaf shall be ignored by the O-RU. See cpLength (cyclic prefix length)
+ in CUS-Plane for details.
+
+ If a static configuration (see static-prach-configurations) is applicable to the endpoint, then O-RU takes
+ length of CP from M-Plane cp-length leaf in static-prach-configurations and the value of this leaf shall be ignored by the O-RU.";
+ }
+
+ leaf cp-length-other {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Provides length of CP used for symbols other than provided by cp-length.
+
+ If a section type 3 is used in C-plane messages addressed to the endpoint, then O-RU takes length of CP from
+ C-Plane cpLength Information Element and the value of this leaf shall be ignored by the O-RU. See cpLength (cyclic prefix length)
+ in CUS-Plane for details.
+
+ If a static configuration (see static-prach-configurations) is applicable to the endpoint, then O-RU takes
+ length of CP from M-Plane cp-length leaf in static-prach-configurations and the value of this leaf shall be ignored by the O-RU.";
+ }
+
+ leaf offset-to-absolute-frequency-center {
+ type int32;
+ mandatory true;
+ description
+ "This provides value of freqOffset to be used if section type 3 is not used. See freqOffset in CUS-plane.
+ offset-to-absolute-frequency-center defines the relative spacing between the centre of RE#0 of RB#0 to the center-of-channel-bandwidth.
+ If offset-to-absolute-frequency-center for NR with SCS=15kHz is odd,
+ it implies that 7.5kHz shift as indicated by the 3GPP parameter frequencyShift7p5khz for UL is applied,
+ which means enable the NR UL transmission with a 7.5 kHz shift to the LTE raster, as defined in 3GPP TS 38.331.
+ When type (in tx/rx-array-carrier) is DSS, 'offset-to-absolute-frequency-center' indicates the 1st RE of 1st RB of NR.";
+ }
+
+ list number-of-prb-per-scs {
+ key scs;
+ description
+ "List of configured for each SCS that will be used.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.
+ Note: set of allowed values is restricted by SCS derived from values in supported-frame-structures.";
+ }
+
+ leaf number-of-prb {
+ type uint16;
+ mandatory true;
+ description
+ "Determines max number of PRBs that will be used in all sections per one symbol.
+ This is affecting allocation of resources to endpoint. Value shall not exceed constrains
+ defined by max-prb-per-symbol of endpoint type. In addition, sum (over all used endpoints
+ within a group of endpoints sharing resources) of number-of-prb rounded up to the
+ nearest value from prb-capacity-allocation-granularity shall not exceed max-prb-per-symbol of the group.";
+ }
+ }
+ }
+
+ grouping occupied-bandwidth {
+ description
+ "Grouping describing occupied bandwidth of a carrier.";
+
+ container occupied-bandwidth {
+ description
+ "Container describing occupied bandwidth of a carrier.
+
+ Information conveyed in this container can be used to determine minimum filter bandwidth in case
+ it cannot be fully determined basing on the carrier bandwidth itself e.g., when NB-IoT carriers
+ are allocated in the carrier's guard band.";
+
+ leaf lower-bound {
+ type uint64;
+ units Hz;
+
+ description
+ "Lower bound of the filter pass bandwidth of a carrier.";
+ }
+
+ leaf upper-bound {
+ type uint64;
+ units Hz;
+
+ description
+ "Upper bound of the filter pass bandwidth of a carrier.";
+ }
+ }
+ }
+
+ grouping tx-common-array-carrier-elements {
+ description
+ "This grouping contains all common parameters for tx-array-carriers and rx-array-carriers";
+
+ leaf absolute-frequency-center {
+ type uint32;
+ status deprecated;
+ description
+ "deprecated in version 5.0.0 and replaced with offset-to-absolute-frequency-center
+ and common FREF translated from absolute-frequency-center (NREF) as defined in 38.104";
+ }
+
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Centre frequency of channel bandwidth in Hz. Common for all numerologies.
+ center-of-channel-bandwidth is the FREF translated from absolute-frequency-center (NREF) as per 3GPP TS 38.104.
+ Refer to Table 5: Centre Bandwidth Calculation in M-plane spec for calculation of this parameter
+ for even and odd number of PRBs in LTE, NR and DSS carrier configuration.";
+ }
+
+ 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 array carriers. Note that NETCONF server uses state parameter
+ to indicate actual state of array carriers operation. When 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
+ "array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Indicates state of array carriers activation operation";
+ }
+
+ leaf-list availability-status {
+ type o-ran-cmn:availability-status;
+ config false;
+ description
+ "indicates availability-status of array carrier";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ config false;
+
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+ leaf rw-duplex-scheme {
+ type leafref {
+ path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/duplex-scheme";
+ require-instance false;
+ }
+ status deprecated;
+ description
+ "Config true type of duplex scheme.
+ Status is deprecated because 'lte-tdd-frame' container, where it was used, is also deprecated.
+ Additionally duplex-scheme is derived from the band-number.";
+ }
+ leaf rw-type {
+ type leafref {
+ path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/type";
+ require-instance false;
+ }
+ status deprecated;
+ description
+ "Config true type of carrier.
+ Status is deprecated because leafref is to a 'config true' schema-node";
+ }
+ uses occupied-bandwidth;
+
+ leaf configured-tx-beamId-table-index {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint8;
+ description
+ "The value of beamId table index configured to be used by the O-DU for a given tx-array-carrier.
+ The value shall be chosen from the list 'tx-array-beamId-table-indexes' advertised by the O-RU.";
+ }
+ }
+
+ grouping rx-common-array-carrier-elements {
+ description
+ "This grouping contains all common parameters for tx-array-carriers and rx-array-carriers";
+
+ leaf absolute-frequency-center {
+ type uint32;
+ status deprecated;
+ description
+ "deprecated in version 5.0.0 and replaced with offset-to-absolute-frequency-center
+ and common FREF translated from absolute-frequency-center (NREF) as defined in 38.104";
+ }
+
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Centre frequency of channel bandwidth in Hz. Common for all numerologies.
+ center-of-channel-bandwidth is the FREF translated from absolute-frequency-center (NREF) as per 3GPP TS 38.104.
+ Refer to Table 15.2.4-1: Centre Bandwidth Calculation in M-plane spec for calculation of this parameter
+ for even and odd number of PRBs in LTE, NR and DSS carrier configuration.";
+ }
+
+ 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 array carriers. Note that NETCONF server uses state parameter
+ to indicate actual state of array carriers operation. When 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
+ "array carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "array carrier is processing an operation requested by change of active parameter.
+ When array carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Indicates state of array carriers activation operation";
+ }
+
+ leaf-list availability-status {
+ type o-ran-cmn:availability-status;
+ config false;
+ description
+ "indicates availability-status of array carrier";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf duplex-scheme {
+ type enumeration {
+ enum TDD {
+ description
+ "TDD scheme";
+ }
+ enum FDD {
+ description
+ "FDD scheme";
+ }
+ }
+ config false;
+
+ description
+ "Type of duplex scheme O-RU supports.";
+ }
+ uses occupied-bandwidth;
+
+ leaf configured-rx-beamId-table-index {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint8;
+ description
+ "The value of beamId table index configured to be used by the O-DU for a given rx-array-carrier.
+ The value shall be chosen from list 'rx-array-beamId-table-indexes' advertised by the O-RU.";
+ }
+ }
+
+ grouping endpoint-section-capacity {
+ leaf max-control-sections-per-data-section {
+ type uint8 {
+ range "1..12";
+ }
+ description
+ "Max number of C-plane sections (C-plane section is part of C-plane message that carries 'section fields')
+ referring to same U-plane section (U-plane section is part of U-plane message that carries
+ 'section header fields' and 'PRB fields') that is supported by endpoint.
+ Note that additional limitations specific for each section type apply on top of this number.";
+ }
+ leaf max-sections-per-symbol {
+ type uint16;
+ description
+ "Max number of sections within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+ leaf max-sections-per-slot {
+ type uint16;
+ description
+ "Max number of sections within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.";
+ }
+ leaf max-highest-priority-sections-per-slot {
+ type uint16;
+ must "current() < ../max-sections-per-slot" {
+ error-message "the sectionID for the highest priority needs to be less than the max sectionIds per slot";
+ }
+ description
+ "Max number of highest priority sections within one slot that can be processed by endpoint or processed collectively by
+ group of endpoints sharing capacity. This leaf applies only when coupling-via-frequency-and-time-with-priorities-optimized
+ is true, in other instances this leaf is ignored by the O-RU. The sectionId for highest priority section descriptions shall
+ start from 0 to specified max value and is a subset of max-sections-per-slot and must be less than max-sections-per-slot.";
+ }
+
+ leaf max-remasks-per-section-id {
+ type uint8 {
+ range "1..12";
+ }
+ default 12;
+ status deprecated;
+ description
+ "maximum number of different reMask values that is applied to a PRB
+ within one section id. This value can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ This parameter is duplicated max-control-sections-per-data-section, hence being deprecated.";
+ }
+ leaf max-uplane-section-header-per-symbol {
+ type uint16;
+ description
+ "Maximum number of U-Plane data section header within one symbol that can be processed by an endpoint or processed collectively by group of
+ endpoints sharing capacity. Clarification for multiple U-Plane data section headers per C-Plane section description is specified in sectionId IE
+ description in CUS-Plane specification. For the cases where this optional parameter is not populated by O-RU or an older version O-DU does not
+ interpret this parameter, O-DU may optionally use max-sections-per-symbol as the default value to limit of U-Plane data section messages which
+ can be processed by the O-RU. If none of the above limitations are supported, O-RU and O-DU may rely on offline negotiation.
+ As an example, this parameter can be used to limit O-RU processing while using Section extension type#6 and #12, which are used for non-contiguous
+ PRB allocation, and hence results in multiple U-Plane data section headers for a given C-Plane section description.";
+ }
+ leaf max-uplane-section-header-per-slot {
+ type uint16;
+ description
+ "Maximum number of U-Plane data section headers within one slot that can be processed by an endpoint or processed collectively by group of
+ endpoints sharing capacity. Clarification for multiple U-Plane data section headers per C-Plane section description is specified in sectionId IE
+ description in CUS-Plane specification. For the cases where this optional parameter is not populated by O-RU or an older version O-DU does not
+ interpret this parameter, O-DU may optionally use max-sections-per-slot as the default value to limit of U-Plane data section messages which can
+ be processed by the O-RU. If none of the above limitations are supported, O-RU and O-DU may rely on offline negotiation.
+ As an example, this parameter can be used to limit O-RU processing while using Section extension type#6 and #12, which are used for non-contiguous
+ PRB allocation, and hence results in multiple U-Plane data section headers for a given C-Plane section description.";
+ }
+
+ description
+ "Parameters describing section capacity where section is understood as number of different sectionId values. Additionally, max limits for U-Plane data sections
+ refer to U-Plane data section headers";
+ }
+
+ grouping endpoint-section-extension-limits {
+ leaf max-mcscaleremask-per-prb {
+ type uint16;
+ description
+ "This parameter limits the number of sets of {mcScaleReMask, csf, mcScaleOffset} values per symPrbPattern the O-RU can support when SE 23 is used in a
+ data section description. Refer to clause 7.7.23.1 of the CUS-Plane specification.";
+ }
+ leaf max-prb-ranges-per-sec-ext-12 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 12 and specifies
+ the maximum number of frequency ranges R per section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with
+ 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency ranges in SE-12 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency ranges per section description used in SE-12</proposed-repair-actions>";
+ }
+ leaf max-freq-hops-per-sec-ext-13 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 13 and specifies
+ the maximum number of frequency hops R per section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with
+ 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency hops in SE 13 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency hops per section description used in SE-13</proposed-repair-actions>";
+ }
+
+ leaf max-prb-blks-per-sec-ext-23 {
+ if-feature feat:SE23-PRB-BLOCK-MODE-SUPPORT;
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 23 and specifies
+ the maximum number of prb blocks (Refer Clause 7.7.23.1 of CUS-Plane spec prb block) per
+ section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU may send alarm notification with 'fault-id = 31'
+ to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of prb blocks in SE-23 per section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce prb blocks per section description used in SE-23</proposed-repair-actions>";
+ }
+
+ description
+ "Parameters describing C-Plane section extension limits/capacities.";
+ }
+
+ grouping endpoint-beam-capacity {
+ leaf max-beams-per-symbol {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of different beamId values within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.
+
+ The parameter doesn't apply if multiple-beamId-tables-support-enabled is set to true.
+ In such a case, max-beams-per-symbol-multiple-beamid-tables applies.";
+ }
+ leaf max-beams-per-slot {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of different beamId values within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.
+
+ The parameter doesn't apply if multiple-beamId-tables-support-enabled is set to true.
+ In such a case, max-beams-per-slot-multiple-beamid-tables applies.";
+ }
+ leaf max-beams-per-symbol-multiple-beamid-tables {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint32;
+ description
+ "Max number of different beamId values within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ beamId values associated with different beamId tables are always considered different.
+
+ This parameter only applies if multiple-beamId-tables-support-enabled is set to true.
+ If multiple-beamId-tables-support-enabled is set to false, then max-beams-per-symbol applies.";
+ }
+ leaf max-beams-per-slot-multiple-beamid-tables {
+ if-feature feat:MULTIPLE-BEAMID-TABLES-SUPPORTED;
+ type uint32;
+ description
+ "Max number of different beamId values within one slot that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity.
+ beamId values associated with different beamId tables are always considered different.
+
+ This parameter only applies if multiple-beamId-tables-support-enabled is set to true.
+ If multiple-beamId-tables-support-enabled is set to false, then max-beams-per-slot applies.";
+ }
+ leaf max-beam-updates-per-slot {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of beams within one slot that can be updated by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.";
+ }
+ leaf max-beam-updates-per-symbol {
+ type uint16 {
+ range "min .. 32767";
+ }
+ description
+ "Max number of beams within one symbol that can be updated by endpoint
+ or processed collectively by group of endpoints sharing capacity
+
+ If the parameter is absent or if value 0 is reported for the parameter,
+ then the endpoint does not support beamforming operation.";
+ }
+
+ description
+ "Parameters describing beam capacity where number of beams is understood as number of different beamId values.
+ Parameters defined for beam updates shall be used to put a maximum limit on number of beam/beamIds which can be updated
+ every slot/symbol. Note: This parameter does not put any restriction on which beams/beamIds can be updated.
+
+ If the parameters defining beam capacity and beam updates are absent or if value 0 is reported for the parameters
+ defining beam capacity and beam updates, then the endpoint does not support beamforming operation.";
+ }
+
+ grouping endpoint-prb-capacity {
+ leaf max-prb-per-symbol {
+ type uint16;
+ description
+ "Max number of prbs within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+
+ leaf max-prb-ranges-per-symbol {
+ type uint32;
+ description
+ "Optional parameter reported by O-RU which indicates the maximum number of PRB ranges
+ that can be processed by single endpoint or processed collectively by group of endpoints
+ sharing capacity within one symbol. For details please see O-RAN WG4 CUS-Plane specification,
+ Clause 7.8.2.1.2 'Limits of number of PRB ranges'.
+
+ In case CU-Plane traffic generated by the O-DU exceeds the limit, an O-RU is responsible
+ for sending alarm notification with 'fault-id = 31' to subscribers following the procedures
+ defined in Clause 11 and Table A.1-1 of O-RAN.WG4.MP.0.
+
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notif message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>max-prb-ranges-per-symbol exceeded</probable-cause>
+ <proposed-repair-actions>Reduce value of number of PRB ranges used per symbol</proposed-repair-actions>";
+ }
+
+ description
+ "Attributes presenting processing capacity related to PRB.";
+ }
+
+ grouping endpoint-numerology-capacity {
+ leaf max-numerologies-per-symbol {
+ type uint16;
+ description
+ "Max number of numerologies within one symbol that can be processed by endpoint
+ or processed collectively by group of endpoints sharing capacity";
+ }
+
+ description
+ "Attributes presenting processing capacity related to numerology.
+
+ This leaf contains valid data only when multiple-numerology-supported
+ is set to true.";
+ }
+
+ grouping per-cplane-message-limits {
+ leaf max-beams-per-cplane-message {
+ type uint16;
+ description
+ "Maximum number of beams which can be received in one single C-Plane message. Number of beams,
+ may include only beamIds, only beam weights or mix of beamIds and beamweights being received by
+ an O-RU in a single C-Plane message.
+ To avoid application layer fragmentation of C-Plane message across the fronthaul, O-RU should
+ avoid setting this to a very low value.
+ As a usage scenario, an O-RU may choose to define only a few quantized values e.g. (128, 256).
+ If the value is set to 0 by O-RU, the O-DU need not restrict the number of beams it can send
+ in single C-Plane message (except limited by MTU size).";
+ }
+
+ leaf max-highest-priority-sec-per-cplane-message {
+ type uint16;
+ description
+ "Maximum number of highest priority sections which can be received in one single C-Plane message.
+ This leaf applies only when 'coupling-via-frequency-and-time-with-priorities' is true";
+ }
+
+ leaf max-beams-per-slot-with-cplane-limits {
+ type uint16;
+ description
+ "Maximum number of beams that are required to be processed by endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables C-Plane limits. This value should replace
+ 'max-beams-per-slot' defined in 'endpoint-beam-capacity'";
+ }
+
+ leaf max-highest-priority-sections-per-slot-with-cplane-limits {
+ type uint16;
+ description
+ "Maximum number of highest priority sections that are required to be processed by endpoint or processed
+ collectively by group of endpoints sharing capacity when O-DU supports C-Plane limits. This value should
+ replace 'max-highest-priority-sections-per-slot' defined in 'endpoint-section-capacity'";
+ }
+
+ leaf max-num-se22-per-cplane-message {
+ type uint16;
+ description
+ "This value limits the max number of section extension 22 (ACK/NACK request) included in a C-Plane message as supported
+ by the endpoint or collectively by group of endpoints sharing capacity when O-DU enables C-Plane limits
+ and when section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint or endpoint sharing group.";
+ }
+
+ leaf max-prb-ranges-per-hp-section-sec-ext-12 {
+ type uint16;
+ description
+ "Optional parameter reported by O-RU which applies to Section Extension 12 and specifies the
+ maximum number of frequency ranges R per highest priority section description supported by O-RU.
+ If this limit is exceeded by the O-DU, the O-RU is responsible for sending alarm notification
+ with 'fault-id = 31' to subscribers following the procedures defined in Clause 11 and
+ Table A.1-1 of O-RAN.WG4.MP.0.
+ As an example, the O-RU can include the following in the corresponding active-alarm list
+ entry and alarm-notification message:
+ <fault-text>Error C-Plane message</fault-text>
+ <probable-cause>Maximum number of frequency hops per highest priority section description exceeded</probable-cause>
+ <proposed-repair-actions>Reduce frequency range per highest section description</proposed-repair-actions>";
+ }
+
+ description
+ "Attributes limit maximum instances of certain parameters contained in a C-Plane message e.g. beams,
+ highest priority sections. This limitation is useful for O-RUs which are packet processing based and are
+ dimensioned to handle fixed number of parameters contained in a C-Plane message. In addition, if O-DU supports
+ cplane limits, O-RU can operate more efficiently and endpoint capacity for applicable parameters are enhanced.
+ as specified by 'max-beams-per-slot-with-cplane-limits' and 'max-highest-priority-sections-per-slot-with-cplane-limits'";
+ }
+
+
+ grouping per-uplane-message-limits {
+ leaf max-section-headers-per-uplane-message {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type uint16;
+ description
+ "Maximum number of section headers which can be received in one single U-Plane message.";
+ }
+
+ description
+ "Attributes describe maximum instances of certian parameters contained in a U-Plane mesaage e.g.
+ number of section headers. Those limitations are required for O-RUs which are packet processing based and are
+ dimensioned to handle limited number of parameters contained in a U-Plane message. ";
+ }
+
+ grouping beam-update-contention-control-limits {
+ leaf max-beams-per-symbol-with-beam-contention-control {
+ type uint16;
+ description
+ "Maximum number of beams within one symbol that can be processed by an endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables the O-RU feature BEAM-UPDATE-CONTENTION-CONTROL.
+ This value should replace 'max-beams-per-symbol' defined in 'endpoint-beam-capacity'";
+ }
+
+ leaf max-beams-updates-per-symbol-with-beam-contention-control {
+ type uint16;
+ description
+ "Maximum number of beams within one symbol that can be updated by an endpoint or processed collectively
+ by group of endpoints sharing capacity when O-DU enables the O-RU feature BEAM-UPDATE-CONTENTION-CONTROL.
+ This value should replace 'max-beam-updates-per-symbol' defined in 'endpoint-beam-capacity'";
+ }
+
+ description
+ "If O-DU supports BEAM-UPDATE-CONTENTION-CONTROL, O-RU can operate more efficiently and endpoint capacity for applicable
+ parameters are enhanced.";
+ }
+
+ grouping endpoint-static-config-support {
+ leaf static-config-supported {
+ type enumeration {
+ enum NONE {
+ description
+ "The endpoint does not support static PRACH / SRS configuration.
+ Reception of PRACH / SRS is possible through real time C-Plane messages
+ if other endpoint capabilities allow for that.";
+ }
+ enum PRACH {
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ description
+ "The endpoint supports statically configured PRACH reception";
+ }
+ enum SRS {
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ description
+ "The endpoint supports statically configured SRS reception";
+ }
+ }
+ default NONE;
+
+ description
+ "The parameter informs if endpoint can be statically configured to process PRACH or SRS reception";
+ }
+
+ leaf max-prach-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ type uint8;
+ description
+ "Maximum number of PRACH patterns the endpoint can handle in PRACH configuration.
+ Due to limited range of the parameter, an O-DU should use extended-max-prach-patterns parameter.";
+ }
+
+ leaf extended-max-prach-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ if-feature feat:EXTENDED-PRACH-CONFIGURATION;
+ type uint32;
+ description
+ "Maximum number of PRACH patterns the endpoint can handle in PRACH configuration if EXTENDED-STATIC-PRACH is supported.";
+ }
+
+ leaf max-srs-patterns {
+ when "(/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'SRS')";
+ type uint8;
+ description
+ "Maximum number of SRS patterns the endpoint can handle in SRS configuration";
+ }
+
+ description
+ "Endpoint's capabilities related to static PRACH / SRS configuration.";
+ }
+
+ grouping endpoint-tdd-pattern-support {
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type boolean;
+ default false;
+
+ description
+ "The parameter informs if endpoint supports configuration for TDD pattern";
+ }
+
+ leaf tdd-group {
+ type uint8;
+ description
+ "Parameter is used to group static-low-level-[tr]x-endpoints.
+ Note: [tr]x-array-carriers using static-low-level-[tr]x-endpoints
+ having the same value of tdd-group, must have the same TDD switching
+ points and the same directions to the air interface granted - regardless TDD switching
+ is controlled by M-Plane or by C-Plane";
+ }
+
+ description
+ "This grouping exposes static-low-level-[tr]x-endpoint's capabilities related to its support for configurable
+ TDD patterns and limitations regarding common TDD switching per groups of endpoints.";
+ }
+
+ grouping u-plane-transmission-control {
+ description
+ "Configuration for UL U-plane transmission control";
+
+ leaf transmission-window-control {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ type enumeration {
+ enum NONE {
+ description
+ "O-RU will use normal transmission type with normal transmission window";
+ }
+ enum STATIC {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ description
+ "O-RU will use transmission window offset and size and transmission type as configured over M-plane";
+ }
+ enum DYNAMIC {
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ description
+ "O-RU will use transmission window offset and size and transmission type as requested over C-plane";
+ }
+ }
+ default NONE;
+
+ description
+ "Selects type of UL U-plane transmission window control for the endpoint";
+ }
+
+ leaf transmission-window-schedule {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type union {
+ type empty;
+ type leafref {
+ path "/user-plane-configuration/transmission-window-schedules/id";
+ }
+ }
+ description
+ "Identifies U-plane transmission window schedule (which provides a list of symbol-specific offsets)
+ to be used by the endpoint.
+ Symbol-specific offset values from the schedule are added to endpoint specific offset value
+ from transmission-window-offset.
+ If this element is not present, the O-RU assumes as all symbol specific offsets are zero.
+ For restrictions on values of symbol-specific offsets see description of transmission-window-offset.
+ This parameter shall not be set to value other than empty if transmission control is not enabled
+ by transmission-window-control.";
+ }
+
+ leaf transmission-window-offset {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type uint16;
+ units "number of symbols";
+ default 0;
+ description
+ "Transmission window offset.
+ The effective symbol-specific offset is sum of endpoint-specific offset value from transmission-window-offset
+ and symbol-specific offset from transmission-window-schedules referenced by transmission-window-schedule.
+
+ If this element is not present then O-RU assumes transmission-window-offset is zero.
+ This parameter shall not be set to value other than 0 if transmission control is not enabled
+ by transmission-window-control.
+
+ There is no direct upper bound for this parameter (except value range defined by leaf type) but there are
+ restrictions on combination of values of transmission-window-offset, transmission-window-offset,
+ symbol-specific offset from transmission-window-schedules and transmission-window-size.
+
+ Specifically, if endpoint is set for delay managed operation (non-time-managed-delay-enabled = FALSE)
+ then O-RU handles U-Plane transmission as delay managed traffic and combination of values of
+ transmission-window-offset, symbol-specific offset from transmission-window-schedules and
+ transmission-window-size must not exceed O-RU buffering capacity (transmission-buffering-capacity)
+ for the requested reception schedule.
+
+ If endpoint is set for non-delay managed operation (non-time-managed-delay-enabled = TRUE)
+ then O-RU handles U-Plane transmission on best effort basis. In this case any combination of values
+ of transmission-window-offset, symbol-specific offset from transmission-window-schedules and
+ transmission-window-size is permitted. This does not remove restrictions on parameters due to restrictions
+ defined for value type or restrictions that depend on INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature
+
+ Additional restrictions on values (and presence) of transmission-window-schedule, transmission-window-offset
+ and transmission-window-size depend on presence of INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is not supported then all endpoints with
+ transmission control enabled that handle the same carrier type and SCS must be configured
+ (via M-plane or C-plane) with parameter values resulting in transmission windows that coincide
+ between the endpoints. That is, for every symbol N, the effective transmission window for symbol N
+ must be shared (start at the same time and end at the same time) by all the endpoints handling
+ same carrier type and SCS. This restriction applies only to endpoints that have transmission
+ control enabled.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is supported then restriction described
+ above does not apply and a different transmission window (window offset and window size)
+ can be used for every endpoint capable of transmission window control.";
+ }
+
+ leaf transmission-window-size {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type uint16 {
+ range "0..10000";
+ }
+ units "microsecond";
+ default 0;
+ description
+ "Transmission window size to be used; only values that are compatible with SCS used
+ for the endpoint are allowed.
+ Minimum supported value is determined by SCS specific transmission window size
+ reported by O-RU in ru-delay-profile.
+
+ Client can use special value 0 (zero) instead of the SCS specific transmission window
+ size reported by O-RU in ru-delay-profile with the same effect.
+ This parameter shall not be set to value other than 0 if transmission control is not enabled
+ (transmission-window-control = NONE) or the endpoint is set for non-delay managed operation
+ (non-time-managed-delay-enabled = TRUE).
+
+ There is no direct upper bound for this parameter (except value range defined by leaf type) but there are
+ restrictions on combination of values of transmission-window-offset, transmission-window-offset,
+ symbol-specific offset from transmission-window-schedules and transmission-window-size.
+ See description of transmission-window-offset for more details.";
+ }
+
+ leaf transmission-type {
+ when "(../transmission-window-control = 'STATIC')";
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type enumeration {
+ enum NORMAL {
+ description
+ "Normal transmission (unspecified within transmission window)";
+ }
+ enum UNIFORMLY-DISTRIBUTED {
+ if-feature feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION;
+ description
+ "Uniformly distributed over transmission window: each of N messages in the window
+ transmitted at random time in a separate subwindow; subwindow size is window size / N ";
+ }
+ }
+
+ description "Type of delay supported by the endpoint";
+ }
+ }
+
+ grouping tx-endpoint-compression-grouping {
+ description
+ "Grouping for endpoint compression";
+
+ container compression {
+ presence
+ "This container shall exists to avoid misaligned compression
+ methods between devices";
+
+ description
+ "Container which consists of global configurable parameters for compression";
+
+ uses cf:compression-details;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ list dynamic-compression-configuration {
+ when "../compression-type = 'DYNAMIC'";
+ key "id";
+ unique "compression-method iq-bitwidth fs-offset";
+ description
+ "List of possible configuration in case dynamic configuration is used
+ Note: In case of empty list all available compressions can be chosen dynamically
+ and default fs-offset is taken (0).
+ If the feature CONFIGURABLE-FS-OFFSET is not supported,
+ fs-offset will not be considered as one of the criteria for unique statement.
+ Refer to RFC7950 clause 7.8.3 for details of unique statement";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular compression";
+ }
+
+ uses cf:compression-method-grouping;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ leaf channel-information-iq-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ status deprecated;
+ description
+ "I/Q bitwidth for channel information in Section Type6.
+ Leaf is deprecated as it should be independent of dynamic compression,
+ NETCONF client instead uses channel-information-bitwidth schema node";
+ }
+ }
+
+ leaf channel-information-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ description
+ "I/Q bitwidth for channel information in Section Type6.
+ Maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively.
+ Note: This parameter shall be used when the NETCONF client does not make use of
+ the CHANNEL-INFORMATION-COMPRESSION feature.";
+ }
+
+ list channel-information-compressions {
+ if-feature "feat:CHANNEL-INFORMATION-COMPRESSION";
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular channel information compression";
+ }
+
+ leaf channel-information-compression-method {
+ type cf:ci-compression-method-def;
+ description
+ "Channel information compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8{
+ range "1..16";
+ }
+ description
+ "Bitwidth to be used in compression, maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively.
+
+ When this schema node is used in the configuration, the O-RU shall ignore the configuration of the
+ /low-level-tx-endpoints/compression/channel-information-bitwidth schema node";
+ }
+
+ description
+ "List of available compressions, that can be dynamically chosen, for channel information (e.g. ST6) for this endpoint.
+ Note1: When only one compression is listed here, it implies that channel information compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+
+ list bf-weights-compressions {
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular beamforming compression";
+ }
+
+ leaf bf-weights-compression {
+ type cf:bf-compression-method-def;
+ description
+ "Beamforming weight compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8 {
+ range "1..16";
+ }
+ description
+ "Bitwidth to be used in compression, maximum value is limited to 16.
+ Value 1,2,..16 indicates I and Q are each 1,2..16 bits wide respectively";
+ }
+ description
+ "List of available compressions, that can be dynamically chosen, for beamforming weights for this endpoint.
+ Note1: When only one compression is listed here, it implies that beamforming weights compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+ }
+ }
+
+ grouping rx-endpoint-compression-grouping {
+ description
+ "Grouping for endpoint compression";
+
+ container compression {
+ presence
+ "This container shall exists to avoid misaligned compression
+ methods between devices";
+
+ description
+ "Container which consists of global configurable parameters for compression";
+
+ uses cf:compression-details;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+
+ list dynamic-compression-configuration {
+ when "../compression-type = 'DYNAMIC'";
+ key "id";
+ unique "compression-method iq-bitwidth fs-offset";
+ description
+ "List of possible configuration in case dynamic configuration is used
+ Note: In case of empty list all available compressions can be chosen dynamically
+ and default fs-offset is taken (0).
+ If the feature CONFIGURABLE-FS-OFFSET is not supported,
+ fs-offset will not be considered as one of the criteria for unique statement.
+ Refer to RFC7950 clause 7.8.3 for details of unique statement";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular compression";
+ }
+
+ uses cf:compression-method-grouping;
+
+ leaf fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+ }
+ }
+
+ list bf-weights-compressions {
+ key id;
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular beamforming compression";
+ }
+
+ leaf bf-weights-compression {
+ type cf:bf-compression-method-def;
+ description
+ "Beamforming weight compression method";
+ }
+
+ leaf iq-bitwidth {
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ description
+ "List of available compressions, that can be dynamically chosen, for beamforming weights for this endpoint.
+ Note1: When only one compression is listed here, it implies that beamforming weights compression
+ is static and mentioned compression is taken into use.
+ Note2: O-RU Shall reject configuration with compressions that are not supported";
+ }
+ }
+ }
+
+ grouping supported-section-type4-config {
+ description
+ "Set of parameters required for section type 4 slot configuration message.";
+ list st4-supported-commands {
+ key "st4-command-type";
+
+ description
+ "This parameter specifies the list of Section Type 4 command types supported by O-RU.";
+ leaf st4-command-type {
+ type enumeration {
+ enum TIME_DOMAIN_BEAM_CONFIG {
+ description "O-RU support for receiving time domain beamforming command.";
+ }
+ enum TDD_CONFIG_PATTERN {
+ description "O-RU support for receiving TDD symbol pattern for a given slot.";
+ }
+ enum TRX_CONTROL {
+ if-feature feat:TRX-CONTROL;
+ description "O-RU support for receiving TRX CONTROL command in a given slot.";
+ }
+ enum ASM {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description "O-RU support for receiving ASM command in a given slot.";
+ }
+ }
+ description
+ "Section Type 4 command types supported by O-RU.";
+ }
+
+ list st4-command-scope-params {
+ key "cmd-scope";
+
+ description
+ "This list contains parameters which are specific to a given command scope associated with a particular section type 4 command type.";
+
+ leaf cmd-scope {
+ type enumeration {
+ enum ARRAY-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array(s) and/or rx-array(s).If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, to the
+ endpoints assigned to the O-DU which was the originator of the command.";
+ }
+ enum CARRIER-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array-carrier and/or rx-array-carrier.";
+ }
+ enum O-RU-COMMAND {
+ description
+ "O-RU level command, i.e., one that applies to all arrays and carriers. If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, as
+ specified in CUS-Plane specification, clause 7.5.2.17.";
+ }
+ }
+ description "Command scope for section type 4 commands";
+ }
+
+ leaf st4-reception-bitmask {
+ type uint16;
+ description
+ "This parameter specifies the O-RU capability to receive Section Type 4 message with associated commands with a particular command scope
+ for the symbols for which the corresponding bit is set to '1' in the bitmask. If the O-RU receives a Section Type 4 message with
+ associated command for a symbol whose bit value is set to '0' in this bitmask, the O-RU shall reject the Section Type 4 message";
+ }
+ }
+ }
+
+ list st4-reception-mask {
+ key "cmd-scope";
+ status deprecated;
+
+ description
+ "List of symbol mask per command scope, specifying the O-RU capability to receive Section Type 4 message for a
+ given command scope only for symbols for which the corresponding bit is set to '1' in the bitmask. If the O-RU
+ receives a Section Type 4 message with associated command for a symbol whose bit value is set to '0' in this
+ bitmask, the O-RU shall reject the Section Type 4 message";
+
+ leaf cmd-scope {
+ type enumeration {
+ enum ARRAY-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array(s) and/or rx-array(s).If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, to the
+ endpoints assigned to the O-DU which was the originator of the command.";
+ }
+ enum CARRIER-COMMAND {
+ description
+ "Command applies to all endpoints assigned to the tx-array-carrier and/or rx-array-carrier.";
+ }
+ enum O-RU-COMMAND {
+ description
+ "O-RU level command, i.e., one that applies to all arrays and carriers. If the O-RU
+ is operating with multiple O-DUs, the scope of an individual O-DU is limited, as
+ specified in CUS-Plane specification, clause 7.5.2.17.";
+ }
+ }
+ description "Command scope for section type 4 commands";
+ }
+
+ leaf st4-reception-bitmask {
+ type uint16;
+ description
+ "This parameter specifies the O-RU capability to receive Section Type 4 message with associated commands for the symbols
+ for which the corresponding bit is set to '1' in the bitmask. If the O-RU receives a Section Type 4 message with
+ associated command for a symbol whose bit value is set to '0' in this bitmask, the O-RU shall reject the Section Type 4 message";
+ }
+ }
+ }
+
+ grouping uplane-conf-group {
+ description
+ "Grouping for uplane configuration related parameters";
+
+ 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 sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-tx-link
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by low-level-tx-link,
+ if 'transport-qualified-processing-element' is included in the configuration,
+ the O-RU shall use 'transport-qualified-processing-element' instead of this schema node,
+ an O-RU Controller shall still configure this schema node with a leafref to a valid ru-element,
+ but this shall not be used by the O-RU.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element'";
+ }
+
+ leaf transport-qualified-processing-element {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "Contains name of processing-element to be used as transport by low-level-tx-link.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 leafref {
+ path "/user-plane-configuration/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";
+ }
+ }
+
+ 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 sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-rx-link
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by low-level-rx-link,
+ if 'transport-qualified-processing-element' is included in the configuration,
+ the O-RU shall use 'transport-qualified-processing-element' instead of this schema node,
+ an O-RU Controller shall still configure this schema node with a leafref to a valid ru-element,
+ but this shall not be used by the O-RU.";
+ }
+
+ leaf transport-session-type {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type enumeration {
+ enum ETH-INTERFACE {
+ description "VLAN based CUS Transport ";
+ }
+ enum UDPIP-INTERFACE {
+ description "UDP/IP based CUS Transport ";
+ }
+ enum ALIASMAC-INTERFACE{
+ description "Alias MAC address based CUS Transport ";
+ }
+ }
+ description
+ "transport session type used when an O-RU is configured with multiple processing elements of different transport session types,
+ in which case it is used for referencing a processing element in 'transport-qualified-processing-element'";
+ }
+
+ leaf transport-qualified-processing-element {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:ru-elements/o-ran-pe:name";
+ }
+ description
+ "Contains name of processing-element to be used as transport by low-level-rx-link.
+ Used when the processing element is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+
+ 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 leafref {
+ path "/user-plane-configuration/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";
+ }
+
+ leaf user-plane-uplink-marking {
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:enhanced-uplane-mapping/o-ran-pe:uplane-mapping/o-ran-pe:up-marking-name";
+ }
+ description
+ "Parameter to set the non-default marking for user-plane";
+ }
+
+ leaf enhanced-user-plane-uplink-marking {
+ if-feature "feat:MULTIPLE-TRANSPORT-SESSION-TYPE";
+ type leafref {
+ path "/o-ran-pe:processing-elements/o-ran-pe:additional-transport-session-type-elements[o-ran-pe:transport-session-type = current()/../transport-session-type]/o-ran-pe:enhanced-uplane-mapping/o-ran-pe:uplane-mapping/o-ran-pe:up-marking-name";
+ }
+ description
+ "Parameter to set the non-default marking for user-plane.
+ Used when the enhanced-uplane-mapping is configured
+ by the list 'additional-transport-session-type-elements'";
+ }
+ }
+
+ grouping common-se24-dmrs-capabilities-grp {
+ description
+ "Grouping of common SE23 DMRS BF capabilities.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ leaf max-user-groups-per-slot {
+ type uint32;
+ description
+ "Maximum number user groups per slot.";
+ }
+
+ leaf max-entries-per-slot {
+ type uint32;
+ description
+ "Maximum number of entries in the table of DMRS configurations per slot.";
+ }
+ }
+
+ list endpoint-types {
+ key "id";
+ config false;
+ description
+ "Properties of endpoint that are common to multiple endpoints if such are identified
+ Note: For any endpoint supporting mixed numerology within slot/symbol (multiple-numerology-supported=TRUE)
+ * Interval specific (per-slot and per-symbol) capacity constraints instantaneous capacity usage
+ (i.e. capacity is shared/distributed between all numerologies used at an instant of time).
+ * Instantaneous capacity usage is the sum of capacity usages of all intervals of a specific type (slot/symbol)
+ that share the instant of time at which instantaneous capacity usage is evaluated regardless of numerology.
+ * Capacity used in an interval is allocated at the start of the interval and is released at the end of the interval
+ (e.g. capacity used for symbol #N of numerology #M is unavailable during symbol #N and available for reuse after symbol #N ends).";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies type of endpoints sharing same properties. Values shall start with 0 and shall be allocated without gaps.";
+ }
+
+ list supported-section-types {
+ key "section-type";
+ description
+ "Indicates section types and extensions endpoints of this type support";
+
+ leaf section-type {
+ type uint8;
+
+ description
+ "This parameter determines the characteristics of U-plane data to be transferred or received from a beam with one pattern id.";
+ }
+
+ leaf-list supported-section-extensions {
+ type uint8;
+
+ description
+ "This parameter provides the extension types supported by the O-RU
+ which provides additional parameters specific to the subject data extension";
+ }
+ }
+
+ uses supported-section-type4-config {
+ if-feature feat:ST4-SLOT-CONFIG-MSG-SUPPORT;
+ }
+
+ leaf-list supported-frame-structures {
+ type uint8;
+
+ description
+ "List of supported values of frame structure. For semantic and allowed values see CUS-Plane Specification, clause '7.5.2.13 frameStructure (frame structure)'";
+ }
+
+ leaf managed-delay-support {
+ type enumeration {
+ enum MANAGED {
+ description
+ "Time managed delays are supported";
+ }
+
+ enum NON_MANAGED {
+ description
+ "Non time managed delays are supported";
+ }
+
+ enum BOTH {
+ description
+ "Both time managed and non time managed delays are supported";
+ }
+ }
+
+ description
+ "Type of delay supported by the endpoint";
+ }
+
+ leaf multiple-numerology-supported {
+ type boolean;
+ default true;
+ description
+ "Indicates whether the endpoint type supports multiple numerologies";
+ }
+
+ leaf max-numerology-change-duration {
+ type uint16 {
+ range "0..10000";
+ }
+
+ units Ts;
+ description
+ "Maximum gap of endpoint operation that will be caused by changing of
+ numerology.
+
+ This time is required for reconfiguration and flushing of pipes.
+
+ This leaf contains valid data only when multiple-numerology-supported
+ is set to true.";
+ }
+
+ uses endpoint-section-capacity;
+ uses endpoint-beam-capacity;
+ uses endpoint-prb-capacity;
+ uses endpoint-section-extension-limits;
+
+ leaf-list prb-capacity-allocation-granularity {
+ type uint16;
+
+ description
+ "List of capacity allocation steps. O-RU allocates PRB capacity rounding it up to nearest value N
+ from prb-capacity-allocation-granularity such that M >= number-of-prb-per-scs.
+ See also number-of-prb-per-scs/number-of-prb.";
+ }
+
+ uses endpoint-numerology-capacity;
+
+ leaf static-transmission-window-control-supported {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports transmission-window-control = STATIC";
+ }
+
+ leaf uniformly-distributed-transmission-supported {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type boolean;
+ description
+ "Endpoint supports transmission-type = UNIFORMLY-DISTRIBUTED";
+ }
+
+ leaf ordered-transmission-supported {
+ if-feature feat:ORDERED-TRANSMISSION;
+ type boolean;
+ description
+ "Endpoint supports ordered transmission of U-plane messages
+ and can be configured with ordered-transmission = TRUE";
+ }
+
+ leaf dynamic-transmission-window-control-supported {
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent window offset and size per symbol";
+ }
+
+ leaf dynamic-transmission-window-control-per-section-supported {
+ when "../dynamic-transmission-window-control-supported = 'true'";
+ if-feature feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL;
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent window offset and size per section";
+ }
+
+ leaf dynamic-uniformly-distributed-transmission-supported {
+ if-feature "feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL and feat:UNIFORMLY-DISTRIBUTED-TRANSMISSION";
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent transmission type per symbol";
+ }
+
+ leaf dynamic-uniformly-distributed-transmission-per-section-supported {
+ when "../dynamic-uniformly-distributed-transmission-supported = 'true'";
+ type boolean;
+ description
+ "Endpoint supports U-plane transmission window control via C-plane
+ (supports transmission-window-control = DYNAMIC) with independent transmission type per section";
+ }
+
+ uses transmission-buffering-capacity {
+ when "static-transmission-window-control-supported = 'true' or dynamic-transmission-window-control-supported = 'true'";
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ }
+
+ leaf cplane-message-processing-limits-required {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ config false;
+ description
+ "Endpoint requires applying C-Plane message processing limits defined in 'per-cplane-message-limits'.
+ and can be configured with cplane-message-processing-limits-enabled = TRUE";
+ }
+
+ uses per-cplane-message-limits {
+ when "cplane-message-processing-limits-required = 'true'";
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+
+ leaf uplane-message-processing-limits-required {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ config false;
+ description
+ "Endpoint has processing limits regarding U-Plane message. Detailed types of limits are defined in 'per-uplane-message-limits'.";
+ }
+
+ uses per-uplane-message-limits {
+ when "uplane-message-processing-limits-required = 'true'";
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+
+ leaf beam-update-contention-control-limits-required {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ config false;
+ description
+ "Endpoint requires applying beam update contention control limits defined in 'beam-update-contention-control-limits'.
+ and can be configured with beam-update-contention-control-enabled = TRUE";
+ }
+
+ uses beam-update-contention-control-limits {
+ when "beam-update-contention-control-limits-required = 'true'";
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ }
+
+ leaf max-ack-nack-per-symbol {
+ type uint16;
+ description
+ "This value indicates the max number of ACK/NACK feedbacks supported by the endpoint in a symbol when
+ section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint.
+ The number of ACK/NACK feedbacks in a symbol is defined as the sum of 'numberofACKs' + 'numberofNACKs' in all C-Plane
+ messages sent by the endpoints in a symbol";
+ }
+
+ leaf non-scheduled-ueid-supported {
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "The parameter informs that the endpoint supports the capability of interpreting that those PRBs in the specified port are not allocated.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf se-11-continuity-flag-supported {
+ if-feature feat:SE11-WITH-CONTINUITY-BIT-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-tx-endpoints' which support Section Extension 11 (SE 11). The
+ O-RU may choose to indicate its support for handling continuity flag as defined in CUS-Plane Clause 7.7.11.9
+ by advertising this flag to TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' implies O-RU supports handling of 'continuity' flag in SE 11;
+ - Value of the flag advertised to 'FALSE' implies the O-RU does not support handling of 'continuity' flag in SE 11.";
+ }
+
+ leaf se-23-prb-block-mode-supported {
+ if-feature feat:SE23-PRB-BLOCK-MODE-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-tx-endpoints' which support Section Extension 23 (SE 23). The
+ O-RU may choose to indicate its support for prbMode = PRB-BLOCK mode flag as defined in CUS-Plane Clause 7.7.23.1
+ by advertising this flag as TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' implies O-RU supports both prbMode = PRB-BLOCK mode of SE 23
+ and prbMode = PRB-MASK which is the default mode when SE-23 is used.
+ - Value of the flag advertised as 'FALSE' implies O-RU supports prbMode = PRB-MASK which is the
+ default mode when SE-23 is used and the O-RU does not support prbMode = PRB-BLOCK mode.";
+ }
+
+ leaf user-group-optimization-supported {
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if O-RU sets this feature flag to 'TRUE' for a given endpoint, and the O-DU chooses to
+ support this feature by setting 'user-group-optimization-enabled-tx' to 'TRUE' for static-low-level-tx-endpoints,
+ 'user-group-optimization-enabled-rx' to 'TRUE' for static-low-level-rx-endpoints,then the O-DU shall be required
+ to send all layers for a given user group UEs i.e., UEs with same time-frequency allocation using single C-Plane
+ section description. refer to CUS-Plane specification clause 7.9.14.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-suported {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ type boolean;
+ config false;
+ description
+ "This flag is applicable for 'static-low-level-[tr]x-endpoints' which support Section Estension 20 (SE-20).
+ The flag associated with each puncturing pattern in SE-20. The details of are defined in CUS-Plane Clause
+ 7.7.20.1. The O-RU indicates support for this feature by advertising this flag as TRUE/FALSE.
+ - Value of the flag advertised as 'TRUE' indicates O-RU supports handling of 'multiSDScope' field in SE-20.
+ - Value of the flag advertised as 'FALSE' indicates O-RU does not supports handling of 'multiSDScope' field in SE-20.";
+ }
+
+ uses supported-configuration-combinations-grp;
+
+ leaf-list supported-filter-indices {
+ type uint32;
+ description
+ "The list of supported values of filterIndex.
+ An empty list means that the set of supported values of filterIndex is not constrained.";
+ }
+
+ leaf-list bf-profile-group {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-bf-profile-group/bf-profile-id";
+ require-instance false;
+ }
+ description
+ "List of beamforming method groups supported by the endpoint, and the related delay profile values.";
+ }
+
+ list supported-pass-band-for-filterindex09-per-scs {
+ key "scs";
+ config false;
+
+ description
+ "When filterIndex 0x9 is used, O-RU shall use minimum pass band filter among the reported passband filter sizes
+ that can accommodate the numPrbc and startPrbc of all the section descriptions associated with same frameStructure.
+ Please refer to CUS specification clause 7.5.2.3 for more details.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.";
+ }
+
+ leaf supported-max-num-msg-for-filterindex0x9-per-scs {
+ type uint16;
+ description
+ "Max number of filters can be actived at a time,
+ and this parameter limits the maximum number of ST3 mesaages with filterIndex set to 9 that O-DU can send so that the total number of filters active is below the maximum limit";
+ }
+
+ leaf-list filter-bandwidth {
+ type uint64;
+ units Hz;
+ description
+ "Bandwidth of a filter given in Hz.
+ If the list for the given SCS indicated via frameStructure is not empty,
+ O-DU should set filterIndex as 1001b for mixed numerology and other channels except PRACH and NB-IoT as specified in Table 7.5.2.3-1 when ST 3 C-plane message is used.";
+
+ }
+ }
+
+ container se24-dmrs-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "Container collecting SE24 DMRS BF capabilties.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ leaf-list supported-entry-types {
+ type uint8;
+ description
+ "Supported values of entryType.";
+ }
+ leaf ue-time-partial-overlap-supported {
+ type boolean;
+ description
+ "Indicates if UE time partial overlap is supported.
+ See CUS-plane clause 12.6.1.2.1.";
+ }
+ leaf ue-freq-partial-overlap-supported {
+ type boolean;
+ description
+ "Indicates if UE frequency partial overlap is supported.
+ See CUS-plane clause 12.6.1.2.1.";
+ }
+ leaf max-user-groups-per-ue-in-time {
+ type uint16;
+ description
+ "The maximum supported number of user groups in time-domain per UE.
+ See CUS-plane clause 12.6.1.2.1";
+ }
+ leaf different-transform-precoding-in-user-group-supported {
+ type boolean;
+ description
+ "Indicates if different transform precoding in user group is supported.";
+ }
+ leaf different-cdm-without-data-in-user-group-supported {
+ type boolean;
+ description
+ "Indicates if different cdm without data in user group is supported.";
+ }
+ leaf max-dmrs-configs-per-user-group-incl-first-last-prb {
+ type uint32;
+ description
+ "Maximum number of different DMRS configurations (excluding differences in dmrsPortNumber) per user group,
+ including first and last PRB.";
+ }
+
+ leaf max-dmrs-configs-per-user-group-excl-first-last-prb {
+ type uint32;
+ description
+ "Maximum number of different DMRS configurations (excluding differences in dmrsPortNumber) per user group,
+ excluding first and last PRB.";
+ }
+ uses common-se24-dmrs-capabilities-grp;
+ grouping dmr-mask-capability-grp {
+ description
+ "Grouping of transform-precoding capabilities";
+
+ list dmrs-mask-capability {
+ key id;
+ description
+ "Parameters for DMRS mask capabilities";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf-list dmrs-symbol-mask {
+ type uint16;
+ description
+ "Supported DMRS symbol mask.
+ Empty list means all the possible symbol masks are supported.";
+ }
+ leaf max-dmrs-ant-port-number {
+ type uint32;
+ description
+ "Maximum DMRS antenna port number.";
+ }
+ leaf max-user-data-layers {
+ type uint32;
+ description
+ "Maximum number of user data layers";
+ }
+ }
+ }
+ container transform-precoding-enabled {
+ description
+ "Parameters for SE24 DMRS BF capabilities with transform precoding enabled";
+ uses dmr-mask-capability-grp;
+ list low-papr-config {
+ key id;
+ description
+ "Supported Low-PAPR configs";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf low-papr-type {
+ type uint16 {
+ range "0 .. 3";
+ }
+ description
+ "Supported values of lowPaprType";
+ }
+ leaf hopping-mode {
+ type uint16 {
+ range "0 .. 3";
+ }
+ description
+ "Supported values of hoppingMode";
+ }
+ }
+ }
+ container transform-precoding-disabled {
+ description
+ "Parameters for SE24 DMRS BF capabilities with transform precoding disabled";
+ uses dmr-mask-capability-grp;
+ list dmrs-config {
+ key id;
+ description
+ "Supported DMRS configs";
+ leaf id {
+ type uint16;
+ description
+ "An identifier of an entry in the list.";
+ }
+ leaf d-type {
+ type uint16 {
+ range "0 .. 1";
+ }
+ description
+ "Supported values of dType.";
+ }
+ leaf pusch-dmrs-muxing-supported {
+ type boolean;
+ description
+ "Indicates if PUSCH DMRS muxing is supported.";
+ }
+ }
+ }
+ }
+
+ leaf sinr-reporting-supported {
+ if-feature feat:DMRS-BF-EQ;
+ type boolean;
+ default false;
+ description
+ "Indicates if SINR reporting is supported.";
+ }
+ container sinr-reporting-capabilities {
+ when "../sinr-reporting-supported = 'true'";
+ if-feature feat:DMRS-BF-EQ;
+ description
+ "Container collecting parameters related to capabilities of SINR reporting";
+ leaf simultaneous-sinr-and-dmrs-sending-supported {
+ type boolean;
+ description
+ "Indicates if simultaneous SINR and DMRS sending is supported.";
+ }
+ list supported-sinr-resolutions {
+ key "id";
+ description
+ "The list of supported SINR reporting resolutions.
+ This entry is applicable if maximum number of data layers in any user group in any slot does not exceed value of max-data-layers.
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a supported SINR reporting resolution.";
+ }
+ leaf sinr-max-data-layers {
+ type uint8;
+ description
+ "The maximum number of data layers scheduled in any user group in a slot.";
+ }
+ leaf-list sinr-per-prb {
+ type uint8;
+ description
+ "List of supported values. Indicates number of SINR values per PRB.";
+ }
+ leaf-list sinr-slot-mask {
+ type uint16;
+ description
+ "List of bitmasks representing supported patterns of SINR reporting in time domain. An emplty list means that the set of supported SINR reporting is unrestricted.";
+ }
+ }
+ container supported-sinr-reference-level {
+ description
+ "Supported range of SINR reference levels values.
+
+ See CUS specification clause 7.2.10 for more details";
+ leaf sinr-reference-level-min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Minimum supported SINR reference level.";
+ }
+ leaf sinr-reference-level-max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Maximum supported SINR reference level.";
+ }
+ }
+ list supported-sinr-compression-methods {
+ key "id";
+ description
+ "The list of supported SINR compression methods.";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a supported SINR compression method.";
+ }
+ uses cf:sinr-compression-details;
+ }
+ }
+ container supported-symb-reorder-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "List of capabilities related to symbol reordering.";
+ uses supported-symb-reorder-capability;
+ }
+ leaf-list supported-user-group-self-assembly-modes {
+ if-feature feat:USER-GROUP-SELF-ASSEMBLY;
+ type user-group-self-assembly-mode ;
+ description
+ "List of user group self assembly mode(s) supported by an endpoint. The O-RU may support SELF-ASSEMBLY-WITH-GROUP-ID and/or SELF-ASSEMBLY-WITHOUT-GROUP-ID.";
+ }
+ leaf-list continuity-block-sizes-supported {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:CONTINUITY-BLOCK-SIZE";
+ type uint16;
+ description
+ "List of continuity bock sizes supported by the O-RU.";
+ }
+ leaf eq-scale-offset-min {
+ if-feature feat:DMRS-BF-EQ;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Refer to cus specification 8.3.1.4, max value 0 dB";
+ }
+ leaf eq-scale-offset-max {
+ if-feature feat:DMRS-BF-EQ;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "Refer to cus specification 8.3.1.4, max value 0 dB";
+ }
+ leaf-list rrm-meas-supported {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type rrm-meas-types;
+ description
+ "List of rrm types supported by the endpoint type";
+ }
+ leaf max-ipn-unalloc-reports-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-UNALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This value indicates the maximum number of ipn unallocated measurement reports per PRB (PRB range) and slot";
+ }
+ leaf max-ipn-unalloc-symbols-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-UNALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This parameter indicates maximum number of measured symbols of all measurement reports for a PRB (PRB range) in the slot ";
+ }
+ leaf max-ipn-alloc-reports-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-ALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint16;
+ description
+ "This value indicates the maximum number of ipn alloc measurement reports per PRB per slot. Relationship between this value and alloc-ipn-per-sym-supported can be found in CUS plan specification clause 9.2.2.4";
+ }
+ leaf-list alloc-ipn-per-dmrs-sym-grp-supported {
+ when "../rrm-meas-supported = 'MEAS-IPN-ALLOC'";
+ if-feature feat:RRM-MEAS-REPORTING;
+ type uint8 {
+ range "0 .. 1";
+ }
+ description
+ "This parameter indicates alloc-ipn measurement type(s) supported by the O-RU.
+ Refer to CUS specification clause 9.2.2.4 for details";
+ }
+ leaf se-10-bgt-11b-supported {
+ type boolean;
+ default false;
+ description
+ "The parameter is applicable for static-low-level-[tr]x-endpoints supporting Section Extension 10. This flag
+ if set to TRUE indicates that the O-RU advertised endpoint, supporting Section Extension 10 supports beamGroupType = 11b.
+ It is mandatory for endpoints supporting DMRS-BF-EQ/DMRS-BF-NEQ beamforming methods to support beamGroupType = 11b.
+ refer to CUS-Plane specification clause 7.7.10.1";
+ }
+
+ leaf-list se-27-odu-controlled-dimensionality-reduction-supported {
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type enumeration {
+ enum STATIC {
+ description
+ "Static O-DU controlled dimnesionality reduction enabled.";
+ }
+ enum DYNAMIC {
+ description
+ "Dynamic O-DU controlled dimnesionality reduction enabled.";
+ }
+ }
+ description
+ "Supported type O-DU controlled dimensionality reduction using SE27.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ leaf se-27-omission-when-enabled-supported {
+ when "(../se-27-odu-controlled-dimensionality-reduction-supported = 'STATIC')
+ or (../se-27-odu-controlled-dimensionality-reduction-supported = 'DYNAMIC')";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type boolean;
+ description
+ "Indicates if O-RU supports omission of SE27 when O-DU controlled dimensionality reduction using SE27 is enabled.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ list supported-se-27-configurations {
+ when "(../se-27-odu-controlled-dimensionality-reduction-supported = 'STATIC')
+ or (../se-27-odu-controlled-dimensionality-reduction-supported = 'DYNAMIC')";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ key number-of-ue-data-layers;
+ description
+ "List of supported values of numElements parameter per number of UE
+ data layers scheduled in user group.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ leaf number-of-ue-data-layers {
+ type uint16;
+ description
+ "Number of UE data layers scheduled in user group.";
+ }
+ leaf-list supported-se-27-num-elements {
+ type uint16;
+ description
+ "Supported values of numElements in SE27 for the provided number of UE data layers.";
+ }
+ }
+ }
+
+ list transmission-window-schedules {
+ if-feature feat:STATIC-TRANSMISSION-WINDOW-CONTROL;
+ key id;
+ description
+ "Parameters for scheduled UL U-plane message transmission (static transmission window control)";
+ leaf id {
+ type uint16;
+ description
+ "Identifies a UL U-plane message transmission schedule";
+ }
+ list schedule {
+ key symbol;
+ description
+ "Defines transmission window offset for given symbol.
+ If no entry is present for a symbol then O-RU assumes offset=0 for that symbol.
+ Entries with offset=0 shall be omitted.";
+ leaf symbol {
+ type uint16;
+ description
+ "Number of a symbol within a frame for which transmission offset is given.";
+ }
+ leaf offset {
+ type uint16;
+ description
+ "Transmission window offset; expressed as number of symbols the transmission window start is delayed by.
+ This value is added to u-plane-transmission-control/transmission-window-offset.
+ For restrictions on value of offset see description of transmission-window-offset.";
+ }
+ }
+ }
+
+ list endpoint-capacity-sharing-groups {
+ key "id";
+ config false;
+ description
+ "Represents groups of endpoints that share capacity. Depending on O-RU implementation,
+ processing resources that handle CU-plane (e.g. memory to keep sections and beams)
+ could be allocated per endpoint or shared between several endpoints.
+ To address this O-RU shall report own capability per endpoint (see endpoint-types)
+ and per group of endpoints sharing capacity.
+ If endpoint is in multiple groups then resulting constraint is minimum over all groups.
+ Note: values of parameters representing capacity that is not shared between endpoints in a group
+ shall be set to max value of specific parameter; this effectively removes related constraint.
+ Note: For any endpoint supporting mixed numerology within slot/symbol (multiple-numerology-supported=TRUE)
+ * Interval specific (per-slot and per-symbol) capacity constraints instantaneous capacity usage
+ (i.e. capacity is shared/distributed between all numerologies used at an instant of time).
+ * Instantaneous capacity usage is the sum of capacity usages of all intervals of a specific type (slot/symbol)
+ that share the instant of time at which instantaneous capacity usage is evaluated regardless of numerology.
+ * Capacity used in an interval is allocated at the start of the interval and is released at the end of the interval
+ (e.g. capacity used for symbol #N of numerology #M is unavailable during symbol #N and available for reuse after symbol #N ends).";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies group of endpoints sharing resources.
+ Values shall start with 0 and shall be allocated without gaps.";
+ }
+ uses endpoint-section-capacity;
+ uses endpoint-beam-capacity;
+ uses endpoint-prb-capacity;
+ uses endpoint-numerology-capacity;
+ uses endpoint-section-extension-limits;
+
+ leaf max-endpoints {
+ type uint16;
+ description
+ "Indicates how many endpoints in the group can be used4 simultaneously";
+ }
+ leaf max-managed-delay-endpoints {
+ type uint16;
+ description
+ "Number of endpoints supporting managed delay that can be used (configured for use) at a time";
+ }
+ leaf max-non-managed-delay-endpoints {
+ type uint16;
+ description
+ "Number of endpoints supporting non-managed delay that can be used (configured for use) at a time";
+ }
+ uses transmission-buffering-capacity {
+ if-feature "feat:STATIC-TRANSMISSION-WINDOW-CONTROL or feat:DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ }
+
+ uses per-cplane-message-limits {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ }
+ leaf max-ack-nack-per-symbol {
+ type uint16;
+ description
+ "This value indicates the max number of ACK/NACK feedbacks supported by the endpoint sharing group in a symbol when
+ section extension 22 (ACK/NACK request) and section type 8 (ACK/NACK feedback) are supported by the endpoint sharing group.
+ The number of ACK/NACK feedbacks in a symbol is defined as the sum of 'numberofACKs' + 'numberofNACKs' in all C-Plane
+ messages sent by the endpoints in group in a symbol";
+ }
+ uses supported-configuration-combinations-grp;
+
+ container se24-dmrs-capabilities {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ description
+ "Container collecting SE24 DMRS BF capabilties.
+ Please refer to CUS specification clause 7.7.24 for more details.";
+
+ uses common-se24-dmrs-capabilities-grp;
+ }
+ }
+
+ list endpoint-prach-group {
+ key "id";
+ config false;
+ description
+ "Represents group of a series of PRACH preamble formats";
+
+ leaf id {
+ type uint16;
+ description
+ "Identifies group of PRACH preamble formats.";
+ }
+
+ leaf-list supported-prach-preamble-formats {
+ type prach-preamble-format;
+ min-elements 1;
+ description
+ "the list of PRACH preamble formats supported by the endpoint-type that is
+ applicable to static-low-level-rx-endpoints in the O-RU";
+ }
+
+ }
+
+ list supported-compression-method-sets {
+ key "id";
+ config false;
+ description
+ "List of available compression methods supported by device";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for compression method set";
+ }
+
+ list compression-method-supported {
+ uses cf:compression-method-grouping;
+ uses cf:compresion-format-grp {
+ status deprecated;
+ }
+
+ leaf-list fs-offset {
+ if-feature cf:CONFIGURABLE-FS-OFFSET;
+ type uint8;
+ default 0;
+ description
+ "Adjusts FS (full scale) value of IQ format relative to FS derived from unmodified IQ format.
+ Please refer to CU-Plane specification for details";
+
+ }
+ description
+ "List of supported compression methods by O-RU
+ Note: if O-RU supports different compression methods per endpoint
+ then please refer to endpoints to have information what
+ exactly is supported on particular endpoint";
+ }
+ }
+
+ grouping supported-configuration-combinations-grp {
+ description
+ "Grouping of supported freqOffset & PRB range combinations.";
+
+ list supported-configuration-combinations {
+ key "combination-id";
+ config false;
+
+ leaf combination-id {
+ type uint32;
+ description
+ "Identification number for a combination.";
+ }
+
+ list set {
+ key "set-id";
+
+ leaf set-id {
+ type uint32;
+ description
+ "Identification number for a set.";
+ }
+
+ leaf max-overlapping-instances {
+ type uint32;
+ description
+ "Max number of configs of the set that can be used at the same time.";
+ }
+
+ list config {
+ key "config-id";
+
+ leaf config-id {
+ type uint32;
+ description
+ "Identification number for a config.";
+ }
+
+ leaf-list scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane.";
+ }
+
+ leaf-list carrier-types {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ enum LTE {
+ description
+ "LTE technology";
+ }
+ enum DSS_LTE_NR {
+ if-feature mcap:DSS_LTE_NR;
+ description
+ "NR and LTE technologies in Dynamic Spectrum Sharing mode";
+ }
+ }
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf filter-pass-bandwidth {
+ type uint64;
+ units Hz;
+
+ description
+ "Width of a filter given in Hz.
+ The filter center frequency is given in center-of-channel-bandwidth of an array carrier.
+ When filterIndex 0x9 is used, O-RU shall report all the passband filter bandwidth per scs using the list supported-pass-band-for-filterindex09-per-scs.";
+ }
+
+ leaf max-prb-range {
+ type uint32;
+
+ description
+ "Maximum frequency range of PRBs that may be requested per frequency offset. Either contiguously or non-contiguously.
+ Total number of PRBs requested per config shall not exceed this value.";
+ }
+
+ leaf center-from-freqoffset {
+ type boolean;
+ description
+ "This node allows to distinguish between combinations valid when
+ center-from-freqoffset-enabled is set to TRUE and combinations
+ valid when center-from-freqoffset-enabled is set to FALSE";
+ }
+
+ leaf-list supported-filter-indices {
+ type uint32;
+ description
+ "The list of supported values of filterIndex.
+ An empty list means that the set of supported values of filterIndex is constrained by the supported-filter-indices
+ provided in the endpoint type.";
+ }
+
+ description
+ "Supported freqOffset & PRB range configuration.
+ Configuration is an instance of processing output equivalent to single FFT operation.";
+ }
+ description
+ "Set of freqOffset & PRB range configurations that require same resource allocation.";
+ }
+ description
+ "List of supported combinations of freqOffset & PRB range configurations.
+ If a leaf is not present in a list element it implies there is no constraint on that particular
+ parameter for the configuration in question.";
+ }
+ leaf center-from-freqoffset-supported {
+ type boolean;
+ description
+ "Endpoint's support for autonomous center frequency (k0) calculation based on frequency offset.
+ This capability applies only to RX endpoints.";
+ }
+ }
+
+ grouping supported-symb-reorder-capability {
+ description
+ "List of capabilities related to symbol reordering.";
+ leaf-list supported-symb-reorder-capability {
+ type symb-reorder-capability;
+ description
+ "List of supported symbol reordering methods.";
+ }
+ leaf max-num-symbol-reordering-pattern-per-slot {
+ when "../supported-symb-reorder-capability = 'PER-SECTION-TX-WINDOW-REASSIGNMENT'";
+ type uint16;
+ description
+ "This parameter defines the maximum number of unique symbol reassignment patterns supported
+ per slot per rx-array-carrier, where a 'symbol reassignment pattern' comprises 14 symbol
+ numbers specifying an altered symbol order (using txWinForOnAirSymbol0~13). The maximum
+ value applies over all SE25 invocations, including when an SE25 invocation includes
+ multiple symbol reassignment patterns. Repeated invocations of a single symbol reassignment
+ pattern shall count as a single unique instance. When endpoints of different endpoint-types
+ with different values of this parameter are associated with an rx-array-carrier, then the
+ smallest of the values shall apply.";
+ }
+ leaf-list up-symbolId-type-supported {
+ type up-SymbolId-type;
+ description
+ "List of supported symbol reordering symbolId interpretation capability.";
+ }
+ }
+
+ 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-list restricted-interfaces {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Optionally used to indicate that a low-level link is constrained to operate only via a subset of the available interfaces.";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ }
+ mandatory true;
+ 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).";
+ }
+
+ leaf endpoint-type {
+ type leafref {
+ path "../../endpoint-types/id";
+ }
+
+ description
+ "Reference to endpoint type capabilities list element supported by this endpoint";
+ }
+
+ leaf-list capacity-sharing-groups {
+ type leafref {
+ path "../../endpoint-capacity-sharing-groups/id";
+ }
+
+ description
+ "Reference to capacities of sharing-groups supported by this endpoint";
+ }
+
+ list supported-reference-level {
+ if-feature TX-REFERENCE-LEVEL;
+ key "id";
+ description
+ "Informs about supported ranges for gain reference level.";
+
+ leaf id {
+ type uint16;
+ description
+ "Identification number for particular range";
+ }
+
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description
+ "Minimum of supported gain reference level";
+ }
+
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description
+ "Maximum of supported gain reference level";
+ }
+ }
+
+ container compression {
+ description
+ "Container collecting compression related parameters.";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports real-time variable bit with";
+ }
+
+ leaf supported-compression-set-id {
+ type leafref {
+ path "../../../supported-compression-method-sets/id";
+ }
+
+ description
+ "Id of supported compression set for this endpoint";
+ }
+ }
+
+ uses endpoint-tdd-pattern-support;
+
+ leaf-list energy-sharing-group-id {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "This value indicates a group of common underlying HW that can be used for energy savings.";
+ }
+ leaf se10-member-candidate-list {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ type leafref {
+ path "/user-plane-configuration/se10-member-candidate-tx-lists/id";
+ require-instance false;
+ }
+ description
+ "This parameter is a pointer to a given member-candidate list entry in 'se10-member-candidate-tx-lists'.
+ This parameter shall be applicable for endpoints supporting Section Extension 10";
+ }
+ }
+
+ 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-list restricted-interfaces {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description
+ "Optionally used to indicate that a low-level link is constrained to operate only via a subset of the available interfaces.";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ }
+ mandatory true;
+ 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).";
+ }
+
+ leaf endpoint-type {
+ type leafref {
+ path "../../endpoint-types/id";
+ }
+
+ description
+ "Reference to endpoint type capabilities list element supported by this endpoint";
+ }
+
+ leaf-list capacity-sharing-groups {
+ type leafref {
+ path "../../endpoint-capacity-sharing-groups/id";
+ }
+
+ description
+ "Reference to capacities of sharing-groups supported by this endpoint";
+ }
+
+ leaf prach-group {
+ type leafref {
+ path "../../endpoint-prach-group/id";
+ require-instance false;
+ }
+ description
+ "An optional leaf used for those rx endpoints that support PRACH, indicating
+ the group id describing the set of of PRACH preambles supported";
+ }
+
+ container compression {
+ description
+ "Container collecting compression related parameters.";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports dynamic compression method";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if endpoint supports real-time variable bit with";
+ }
+
+ leaf supported-compression-set-id {
+ type leafref {
+ path "../../../supported-compression-method-sets/id";
+ }
+
+ description
+ "Id of supported compression set for this endpoint";
+ }
+ }
+
+ uses endpoint-static-config-support;
+
+ uses endpoint-tdd-pattern-support;
+
+ leaf transmission-order {
+ when "(/user-plane-configuration/endpoint-types[id=current()/../endpoint-type]/ordered-transmission-supported = 'true')";
+ if-feature feat:ORDERED-TRANSMISSION;
+ type uint32;
+ description
+ "The value indicates relative order of sending U-plane messages specific to same symbol
+ and transmission window by two endpoints with ordered-transmission = TRUE
+ belonging to the same transmission-order-group;
+ multiple endpoints may report the same value if their relative sending order is not guaranteed";
+ }
+
+ leaf transmission-order-group {
+ when "(/user-plane-configuration/endpoint-types[id=current()/../endpoint-type]/ordered-transmission-supported = 'true')";
+ if-feature feat:ORDERED-TRANSMISSION;
+ type uint32;
+ description
+ "The value indicates a group of endpoints that preserve relative ordering of message sending;
+ message sending between endpoints in different groups is not guaranteed";
+ }
+
+ leaf-list energy-sharing-group-id {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ type uint8;
+ description
+ "This value indicates a group of common underlying HW that can be used for energy savings.";
+ }
+ leaf se10-member-candidate-list {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ type leafref {
+ path "/user-plane-configuration/se10-member-candidate-rx-lists/id";
+ require-instance false;
+ }
+ description
+ "This parameter is a pointer to a given member-candidate list entry in 'se10-member-candidate-rx-lists'.
+ This parameter shall be applicable for endpoints supporting Section Extension 10";
+ }
+ }
+
+ 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 modifiable element in static object";
+
+ leaf name {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Unique name of low-level-tx-endpoint object. Reference to static object";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-tx-endpoint
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+
+ uses tx-endpoint-compression-grouping;
+ uses scs-config;
+
+ container e-axcid {
+ uses eaxc;
+
+ description
+ "Contains local address of low level TX endpoint offered by NETCONF server.";
+ }
+
+ uses coupling-methods;
+
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints[name=current()/../name]/configurable-tdd-pattern-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - needed for conditional under tx-array-carrier";
+ }
+
+ leaf cplane-message-processing-limits-enabled {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support the C-Plane message processing limits and has selected to adhere to the C-Plane limits defined in 'per-cplane-message-limits'.
+ FALSE: O-DU shall not support C-Plane message processing limits and endpoint limits defined in 'per-cplane-message-limits' shall not apply";
+ }
+
+ leaf uplane-message-section-header-limit-enabled {
+ if-feature feat:UPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "O-DU declares to obey the limit exposed via the leaf max-section-headers-per-uplane-message by setting this parameter to 'true'.
+ For details of this parameter's usage, please refer to M-plane spec clause 15.10";
+ }
+
+ leaf beam-update-contention-control-enabled {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support beam update contention control feature of O-RU.Thus requiring O-DU to comply with beam
+ updates restrictions defined in CUS-Plane Spec Section 'Weight-based dynamic beamforming'. In this case applicable
+ beam limits defined in 'beam-update-contention-control-limits' shall apply.
+ FALSE: O-DU shall not support beam update contention control feature of O-RU. Applicable beam limits defined in
+ 'endpoint-beam-capacity' shall apply";
+ }
+
+ container channel-information-prb-group-configuration {
+ if-feature feat:CHANNEL-INFORMATION-PRB-GROUP;
+ description
+ "Container for configurable parameters for channel information prb group";
+
+ leaf enable-ci-prb-group {
+ type boolean;
+ description
+ "Informs whether or not to enable channel information PRB group in the O-RU,
+ if its value is set to true, the O-RU shall receive and process channel
+ information (e.g., ST6) with PRB group size of configured ci-prb-group-size.";
+ }
+
+ leaf ci-prb-group-size {
+ type uint8 {
+ range "2..254";
+ }
+ description
+ "The configured channel information PRB group size.
+ If enable-ci-prb-group is configured as TRUE, and the IE ciPrbGroupSize doesn't exist in a section description for channel information,
+ the parameter ci-prb-group-size shall be used for this section description.
+ If the IE ciPrbGroupSize exists in a section description for channel information,
+ no matter whether enable-ci-prb-group is configured as TRUE, the IE ciPrbGroupSize shall be used for this section description.";
+ }
+ }
+
+ leaf non-scheduled-ueid-enabled{
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "If O-DU configures 'non-scheduled-ueid-enabled' = TRUE,
+ and Section Extension 10 is applied to Section Types 5 and beamGroupType = 10b,
+ and the O-DU set ueId of a port in Section Extension 10 to 0x7FFF,
+ the endpoint shall interpret that the PRBs in the section description are not scheduled for this port.
+ The endpoint only interprets this leaf if non-scheduled-ueid-supported = true is reported in the related static endpoint, in other cases this leaf is ignored.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf se-11-continuity-flag-enabled {
+ if-feature feat:SE11-WITH-CONTINUITY-BIT-SUPPORT;
+ type boolean;
+ default false;
+ description
+ "By setting the value of this leaf node to TRUE, the O-DU declares it will provide 'continuity' flag information in SE 11.
+ In this case the O-DU shall provide PRB region 'continuity' information in every SE 11 sent to the applicable low-level-tx-endpoint(s)
+ (static-low-level-tx-endpoit(s) which indicated support of this feature by setting 'se-11-continuity-flag-supported' flag to TRUE).
+ In case
+ - O-DU is running SW conformant to older O_RAN release and does not interpret the flag 'se11-continuity-bit-enabled' or
+ - the O-DU sets 'se11-continuity-flag-enabled' = FALSE,
+ no information regarding PRB region continuity is sent to the O-RU. In such case the O-RU shall process the PRB bundles as
+ it would have in the absence of the 'continuity' flag in SE11.
+ This behavior shall be same as when O-RU receives message with 'reserved' field value set to '0b'.";
+ }
+
+ leaf prg-size-supp-se-21-with-st6-enabled {
+ if-feature feat:PRG-SIZE-SUPP-SE-21-WITH-ST6;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall send prgSize information from the O-DU to the O-RU as described in Clause 7.7.2.3.1 of the CUS-Plane spec.
+ FALSE:prgSize information cannot be sent from the O-DU to the O-RU using Section Type 6.";
+ }
+
+ leaf prg-size-supp-se-21-with-st5-enabled {
+ if-feature feat:PRG-SIZE-SUPP-SE-21-WITH-ST5;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall send prgSize information from the O-DU to the O-RU as described in Clause 7.7.2.3.2 of the CUS-Plane spec.
+ FALSE:prgSize information cannot be sent from the O-DU to the O-RU using Section Type 5.";
+ }
+
+ leaf user-group-optimization-enabled-tx {
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if the O-RU advertises the feature flag to 'user-group-optimization-supported' set to
+ TRUE for associated static-level-tx-endpoint, the O-DU may choose to set this flag to 'TRUE' or 'FALSE'.
+ - If set to 'TRUE', the O-DU shall be required to send all layers for a given user group UEs i.e., UEs with same
+ time-frequency allocation using single C-Plane section description.
+ - If set to 'FALSE', the O-DU restriction to send all layers for a given user group UEs shall not apply.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-enabled-tx {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "This flag is applicable for O-RU adevertised static-level-tx-endpoint advertises for which
+ 'se-20-multi-sd-punc-pattern-suported' = TRUE. The flag is configured by the O-DU to TRUE/FALSE.
+ - Value of the flag set to 'TRUE' indicates O-DU shall set the value 'multiSDScope' in SE-20 to TRUE/FALSE.
+ - Value of the flag set to 'FALSE' indicates O-DU shall not set the value 'multiSDScope' in SE-20. The corresponding
+ fields shall be interpretted as reserved field by the O-RU.";
+ }
+
+ container combination-configuration {
+ leaf endpoint-type {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints[name=current()/../../name]/endpoint-type";
+ require-instance false;
+ }
+ description
+ "Leafref to the endpoint-type of the endpoint.";
+ }
+
+ leaf combination-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../endpoint-type]/supported-configuration-combinations/combination-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which configuration combination will be used by the endpoint.";
+ }
+
+ list configurations {
+ key id;
+
+ leaf id {
+ type uint32;
+ description
+ "Identifier of an entry in the list";
+ }
+
+ leaf set-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set/set-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which set will be used by the endpoint.";
+ }
+
+ leaf config-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set[set-id = current()/../set-id]/config/config-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which config will be used by the endpoint.";
+ }
+
+ description
+ "An optional list describing which configurations will be used by the endpoint.
+ The list can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.
+ If the list is empty, then O-DU intends to use every capability within combination identified by combination-id.";
+ }
+
+ description
+ "An optional container describing which configuration combination will be used by the endpoint.
+ The container can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+ }
+
+ leaf configured-bf-profile-id {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-types/bf-profile-group";
+ require-instance false;
+ }
+ description
+ "Configure the beamforming method list and related delay profiles will be used by the endpoint.
+ The configured-bf-profile-id must be one of the supported bf-profile-id(s) reported by the endpiont-type related to the endpoint.
+ If O-DU does not set configured-bf-profile-id, the O-RU shall not support the feature.";
+ }
+
+ leaf-list bf-methods {
+ if-feature "feat:SELECTED-BF-METHOD-CONFIGURATION and feat:BF-DELAY-PROFILE";
+ type beamforming-method-type;
+ description
+ "Beamforming method(s) configured on the endpoint.
+
+ If the value of configured-bf-profile-id is set, then beamforming method(s) configured on the endpoint shall
+ be selected from the set of supported beamforming methods of the selected endpoint-bf-profile-group
+ Otherwise, the beamforming method(s) configured on the endpoint shall be selected from the set of supported
+ beamforming methods reported in the related endpoint-bf-profile-group(s).";
+ }
+ }
+
+ 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 modifiable element in static object";
+
+ leaf name {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints/name";
+ require-instance false;
+ }
+ mandatory true;
+
+ description
+ "Unique name of low-level-rx-endpoint object. Reference to static object";
+ }
+
+ leaf sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type leafref {
+ path "/or-user:users/or-user:user/or-user:sro-id";
+ }
+ description
+ "An optional shared resource operator associated with this list entry.
+ When present, indicates that the list entry corresponds to a low-level-rx-endpoint
+ associated with a shared resource operator where the sro-id identifies
+ a specific shared resource operator.
+ This schema-node is used to refine NACM privileges for shared
+ resource operators";
+ }
+
+ uses rx-endpoint-compression-grouping;
+ uses scs-config;
+
+ list ul-fft-sampling-offsets {
+ key scs;
+ description
+ "List of FFT sampling offsets configured for each SCS that will be used.
+ Client shall configure one element for each SCS that will be used.";
+
+ leaf scs {
+ type mcap:scs-config-type;
+ description
+ "Value corresponds to SCS values defined for frameStructure in C-plane
+ Note: set of allowed values is restricted by SCS derived from values in supported-frame-structures.";
+ }
+
+ leaf ul-fft-sampling-offset {
+ type uint16;
+
+ units Ts;
+ description
+ "Determines time advance of capture window for FFT.
+ Value represents time advance of capture window start in relation to the end of CP. Unit is Ts.
+ The value of this parameter shall not be larger than the duration of the cyclic prefix; in case of
+ variability of the cyclic prefix duration, the limit is the shortest duration of the cyclic prefix in use.
+ Note: value of this parameter is usually set to '0' (zero) for PRACH channels.
+ Any phase offset resulting from the non-zero value of this parameter is handled in O-DU.
+ Please refer to the O-RAN CUS-Plane, clause 4.4.3 for more details on the intended usage and value restrictions.";
+ }
+ }
+
+ container e-axcid {
+ uses eaxc;
+
+ description
+ "Contains local address of low level RX endpoint offered by NETCONF server.";
+ }
+
+ leaf eaxc-gain-correction {
+ if-feature EAXC-GAIN-CORRECTION;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ default 0;
+ description
+ "eAxC specific part of overall gain_correction.
+ gain_correction = common array-carrier gain-correction + eAxC-gain-correction.";
+ }
+
+ leaf non-time-managed-delay-enabled {
+ type boolean;
+ default false;
+ description
+ "Tells if non time managed delay shall be enabled";
+ }
+
+ uses coupling-methods;
+
+ leaf static-config-supported {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/static-config-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - for further conditionals";
+ }
+
+ leaf static-prach-configuration {
+ when "(/user-plane-configuration/low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'PRACH')";
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-prach-configurations/static-prach-config-id";
+ }
+ description
+ "This parameter creates reference to static PRACH configuration applicable for particular endpoint";
+ }
+
+ leaf static-srs-configuration {
+ when "(/user-plane-configuration/low-level-rx-endpoints[name=current()/../name]/static-config-supported = 'SRS')";
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-srs-configurations/static-srs-config-id";
+ }
+ description
+ "This parameter creates reference to static SRS configuration applicable for particular endpoint";
+ }
+
+ leaf configurable-tdd-pattern-supported {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../name]/configurable-tdd-pattern-supported";
+ require-instance false;
+ }
+ description "RO to RW parameter mapping - needed for conditional under rx-array-carrier";
+ }
+
+ uses u-plane-transmission-control;
+
+ leaf ordered-transmission {
+ if-feature feat:ORDERED-TRANSMISSION;
+ type boolean;
+ default false;
+ description
+ "Commands O-RU to order UL U-plane message transmission between endpoints
+ Meaningless when ordered transmission is not supported for particular endpoint.";
+ }
+
+ leaf cplane-message-processing-limits-enabled {
+ if-feature feat:CPLANE-MESSAGE-PROCESSING-LIMITS;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support C-Plane message processing limits and has selected to adhere
+ to the C-Plane limits defined in 'per-cplane-message-limits'.
+ FALSE: O-DU shall not support C-Plane message processing limits and hence C-Plane and
+ endpoint limits defined in 'per-cplane-message-limits' shall not apply";
+ }
+
+ leaf beam-update-contention-control-enabled {
+ if-feature feat:BEAM-UPDATE-CONTENTION-CONTROL;
+ type boolean;
+ default false;
+ description
+ "TRUE: O-DU shall support beam update contention control feature of O-RU.Thus requiring O-DU to comply with beam
+ updates restrictions defined in CUS-Plane Spec Section 'Weight-based dynamic beamforming'. In this case applicable
+ beam limits defined in 'beam-update-contention-control-limits' shall apply.
+ FALSE: O-DU shall not support beam update contention control feature of O-RU. Applicable beam limits defined in
+ 'endpoint-beam-capacity' shall apply";
+ }
+
+ leaf non-scheduled-ueid-enabled{
+ if-feature feat:NON-SCHEDULED-UEID;
+ type boolean;
+ default false;
+ description
+ "If O-DU configures 'non-scheduled-ueid-enabled' = TRUE,
+ and Section Extension 10 is applied to Section Types 5 and beamGroupType = 10b,
+ and the O-DU set ueId of a port in Section Extension 10 to 0x7FFF,
+ the endpoint shall interpret that the PRBs in the section description are not scheduled for this port.
+ The endpoint only interprets this leaf if non-scheduled-ueid-supported = true is reported in the related static endpoint, in other cases this leaf is ignored.
+ Please refer to CUS specification clause 7.9.13 for more details.";
+ }
+
+ leaf center-from-freqoffset-enabled {
+ type boolean;
+ default false;
+ description
+ "Endpoint is enabled / prohibited to autonomously calculate center frequency based on frequency offset.";
+ }
+
+ leaf user-group-optimization-enabled-rx{
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "The parameter indicates that if the O-RU advertises the feature flag to 'user-group-optimization-supported' set to
+ TRUE for associated static-level-rx-endpoint, the O-DU may choose to set this flag to 'TRUE' or 'FALSE'.
+ - If set to 'TRUE', the O-DU shall be required to send all layers for a given user group UEs i.e.,
+ UEs with same time-frequency allocation using single C-Plane section description.
+ - If set to 'FALSE', the O-DU restriction to send all layers for a given user group UEs shall not apply.";
+ }
+
+ leaf se-20-multi-sd-punc-pattern-enabled-rx {
+ if-feature feat:SE20-MULTI-SD-PUNC-PATTERN-SUPPORT;
+ if-feature feat:USER-GROUP-OPTIMIZATION;
+ type boolean;
+ default false;
+ description
+ "This flag is applicable for O-RU adevertised static-level-rx-endpoint advertises for which
+ 'se-20-multi-sd-punc-pattern-suported' = TRUE. The flag is configured by the O-DU to TRUE/FALSE.
+ - Value of the flag set to 'TRUE' indicates O-DU shall set the value 'multiSDScope' in SE-20 to TRUE/FALSE.
+ - Value of the flag set to 'FALSE' indicates O-DU shall not set the value 'multiSDScope' in SE-20. The corresponding
+ fields shall be interpretted as reserved field by the O-RU.";
+ }
+
+ container combination-configuration {
+ leaf endpoint-type {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints[name=current()/../../name]/endpoint-type";
+ require-instance false;
+ }
+ description
+ "Leafref to the endpoint-type of the endpoint.";
+ }
+
+ leaf combination-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../endpoint-type]/supported-configuration-combinations/combination-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which configuration combination will be used by the endpoint.";
+ }
+
+ list configurations {
+ key id;
+
+ leaf id {
+ type uint32;
+ description
+ "Identifier of an entry in the list";
+ }
+
+ leaf set-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set/set-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which set will be used by the endpoint.";
+ }
+
+ leaf config-id {
+ type leafref {
+ path "/user-plane-configuration/endpoint-types[id = current()/../../endpoint-type]/supported-configuration-combinations[combination-id = current()/../../combination-id]/set[set-id = current()/../set-id]/config/config-id";
+ require-instance false;
+ }
+ description
+ "A parameter describing which config will be used by the endpoint.";
+ }
+
+ description
+ "An optional list describing which configurations will be used by the endpoint.
+ The list can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+
+ }
+
+ description
+ "An optional container describing which configuration combination will be used by the endpoint.
+ The container can be provided by an O-DU, so that an O-RU can optimize the processing in the endpoint.";
+ }
+
+ leaf configured-bf-profile-id {
+ if-feature feat:BF-DELAY-PROFILE;
+ type leafref {
+ path "/user-plane-configuration/endpoint-types/bf-profile-group";
+ require-instance false;
+ }
+ description
+ "Configure which beamforming method list and related delay profile will be used by the endpoint.
+ The configured-bf-profile-id must be one of the supported bf-profile-id(s) reported by the endpiont-type related to the endpoint.
+ If O-DU does not set configured-bf-profile-id, the O-RU shall not support the feature.";
+ }
+
+ leaf sinr-reporting-enabled {
+ if-feature feat:DMRS-BF-EQ;
+ type boolean;
+ default false;
+ description
+ "Enables SINR reporting for the endpoint.";
+ }
+
+ container sinr-reporting-configuration {
+ when "../sinr-reporting-enabled = 'true'";
+ if-feature feat:DMRS-BF-EQ;
+ description
+ "Container collecting parameters related to configuration of SINR reporting";
+
+ container sinr-resolution {
+ description
+ "Container collecting parameters related to configuration of SINR reporting
+ resolution.
+ Supported values are constrained by the values reported in endpoint-types/supported-sinr-resolutions.
+
+ Please refer to CUS specification clause 7.2.10 for more details.";
+ leaf sinr-per-prb {
+ type uint8;
+ description
+ "Number of SINR values per PRB.";
+ }
+ leaf sinr-slot-mask {
+ type uint16;
+ description
+ "Pattern of SINR reports represented as a bitmask.";
+ }
+ }
+ container sinr-compression {
+ description
+ "Configuration of SINR compression.";
+ uses cf:sinr-compression-details;
+ leaf sinr-reference-level-config {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "SINR reference level.";
+ }
+
+ leaf sinr-reference-level-used {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ config false;
+ description
+ "SINR reference level used. This parameter shall be the O-RU's best approximation of the sinr-reference-level-config.";
+ }
+ }
+ }
+ leaf se26-usage-enabled {
+ type boolean;
+ default false;
+ description
+ "When se26-usage-enabled = FALSE, O-DU shall not use SE 26 and shall not convey UE frequency offset information.
+ When se26-usage-enabled = TRUE, O-DU may convey UE frequency offset information via SE 26.";
+ }
+
+ leaf-list bf-methods {
+ if-feature "feat:SELECTED-BF-METHOD-CONFIGURATION and feat:BF-DELAY-PROFILE";
+ type beamforming-method-type;
+ description
+ "Beamforming method(s) configured on the endpoint.
+
+ If the value of configured-bf-profile-id is set, then beamforming method(s) configured on the endpoint shall
+ be selected from the set of supported beamforming methods of the selected endpoint-bf-profile-group
+ Otherwise, the beamforming method(s) configured on the endpoint shall be selected from the set of supported
+ beamforming methods reported in the related endpoint-bf-profile-group(s).";
+ }
+ leaf eq-scale-offset-config {
+ if-feature "feat:DMRS-BF-EQ";
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ description
+ "scale offset is configured by the O-DU to avoid overflow when encoding data for the fronthaul interface.Refer to cus specification clause 8.1.3.4 for details.";
+ }
+ leaf eq-scale-offset-used {
+ if-feature "feat:DMRS-BF-EQ";
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ config false;
+ description
+ "scale offset is used by the O-RU to avoid overflow when encoding data for the fronthaul interface.Refer to cus specification clause 8.1.3.4 for details.";
+ }
+ leaf-list rrm-meas-enabled {
+ if-feature feat:RRM-MEAS-REPORTING;
+ type rrm-meas-types;
+ description
+ "This parameter indicates which rrm measurements are enabled for this low level endpoint";
+ }
+
+ leaf se-27-odu-controlled-dimensionality-reduction-enabled {
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type enumeration {
+ enum DISABLED {
+ description
+ "O-DU controlled dimnesionality reduction disabled.";
+ }
+ enum STATIC {
+ description
+ "Static O-DU controlled dimnesionality reduction enabled.";
+ }
+ enum DYNAMIC {
+ description
+ "Dynamic O-DU controlled dimnesionality reduction enabled.";
+ }
+ }
+ default DISABLED;
+ description
+ "Parameter indicating if O-DU controlled dimnesionality reduction is enabled.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ leaf se-27-num-elements {
+ when "../se-27-odu-controlled-dimensionality-reduction-enabled = 'STATIC'";
+ if-feature feat:SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION;
+ type uint16;
+ description
+ "Configured value of numElements in SE27.
+ Please refer to CUS specification clause 7.7.27 for more details.";
+ }
+ }
+
+ 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.";
+ }
+ list odu-ids {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "An optional list of o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a tx-array-carrier
+ associated with one or more particular odu-id(s).
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a single operator environment, where watchdog supervision is performed
+ on a per odu-id basis and supervision failure only results in a sub-set
+ of carriers being de-activated.";
+
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "feat:SHARED-ORU-MULTI-ODU and feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "An optional list of sro and o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a tx-array-carrier
+ associated with one or more particular odu-id(s) operated by a particular sro-id.
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a multi operator environment, where watchdog supervision is performed on
+ a per odu-id basis and supervision failure only results in a sub-set of
+ carriers being de-activated.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+
+ uses tx-common-array-carrier-elements;
+
+ leaf band-number {
+ if-feature mcap:LAA;
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ require-instance false;
+ }
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multi-band solutions.";
+ }
+
+ container lte-tdd-frame {
+ when "(/user-plane-configuration/tx-array-carriers/rw-type = 'LTE') and (/user-plane-configuration/tx-array-carriers/rw-duplex-scheme = 'TDD')";
+ status deprecated;
+ description
+ "Container which consists of global configurable parameters for tdd Frame.
+ This contained is deprecated due to introduction of TDD pattern configuration
+ applicable in a common way for LTE and NR.";
+
+ leaf subframe-assignment {
+ type enumeration {
+ enum SAO {
+ description "subframe assignment configuration 0";
+ }
+ enum SA1 {
+ description "subframe assignment configuration 1";
+ }
+ enum SA2 {
+ description "subframe assignment configuration 2";
+ }
+ enum SA3 {
+ description "subframe assignment configuration 3";
+ }
+ enum SA4 {
+ description "subframe assignment configuration 4";
+ }
+ enum SA5 {
+ description "subframe assignment configuration 5";
+ }
+ enum SA6 {
+ description "subframe assignment configuration 6";
+ }
+ }
+ mandatory true;
+ description
+ "Indicates DL/UL subframe configuration as specified in
+ 3GPP TS 36.211 [v15.3.0, table 4.2-2]";
+ }
+ leaf special-subframe-pattern {
+ type enumeration {
+ enum SPP0 {
+ description "special subframe pattern configuration 0";
+ }
+ enum SPP1 {
+ description "special subframe pattern configuration 1";
+ }
+ enum SPP2 {
+ description "special subframe pattern configuration 2";
+ }
+ enum SPP3 {
+ description "special subframe pattern configuration 3";
+ }
+ enum SPP4 {
+ description "special subframe pattern configuration 4";
+ }
+ enum SPP5 {
+ description "special subframe pattern configuration 5";
+ }
+ enum SPP6 {
+ description "special subframe pattern configuration 6";
+ }
+ enum SPP7 {
+ description "special subframe pattern configuration 7";
+ }
+ enum SPP8 {
+ description "special subframe pattern configuration 8";
+ }
+ enum SPP9 {
+ description "special subframe pattern configuration 9";
+ }
+ enum SPP10 {
+ description "special subframe pattern configuration 10";
+ }
+ }
+ mandatory true;
+ description
+ "Indicates TDD special subframe configuration as in TS 36.211
+ [v15.3.0, table 4.2-1] ";
+ }
+ }
+
+ container laa-carrier-configuration {
+ when "../band-number = 46";
+ if-feature mcap:LAA;
+ description "Container to specify LAA feature related carrier configuration.";
+ uses laa-carrier-config;
+ }
+
+ leaf gain {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+
+ description
+ "Transmission gain in dB. Value applicable to each array element carrier belonging to array carrier.
+
+ The value of transmission gain shall meet the constraints defined in CUS-Plane, clause 8.1.3.3.";
+ }
+
+ 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-carriers that have same frequency and bandwidth.
+ Note2: Unit is 1/1.2288e9 s. 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-carriers that have same frequency and bandwidth.";
+ }
+
+ leaf t-da-offset {
+ if-feature "feat:EXT-ANT-DELAY-CONTROL";
+ type uint32;
+ units Tc;
+ default 0;
+ description
+ "the time difference between the output of DL signal at the
+ antenna connector of O-RU and the transmission over the air.
+ units are Tc=~0.5ns=1/1.96608GHz.
+ An O-RU with 'ext-ant-delay-capability' = 'PER-O-RU' shall reject any configuration
+ where different values of t-da-offset are configured on tx-array-carriers;
+ An O-RU with 'ext-ant-delay-capability' = 'PER-ARRAY' shall reject any configuration
+ where different values of t-da-offset are configured on tx-array-carriers associated with the same tx-array.";
+ }
+
+ leaf reference-level {
+ if-feature TX-REFERENCE-LEVEL;
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ default 0;
+ description
+ "Allows to adjust reference level for sum of IQ signal power over eAxCs in this array-carrier.";
+ }
+
+ leaf configurable-tdd-pattern {
+ when "not(/user-plane-configuration/low-level-tx-endpoints[name = string(/user-plane-configuration/low-level-tx-links[tx-array-carrier = current()/../name]/tx-array-carrier)]/configurable-tdd-pattern-supported = 'false')";
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/configurable-tdd-patterns/tdd-pattern-id";
+ }
+ description
+ "This parameter creates reference to configuration for TDD pattern applicable for particular tx-array-carrier.
+ The leaf may exist under tx-array-carrier only in case O-RU supports feature 'CONFIGURABLE-TDD-PATTERN-SUPPORTED'
+ AND all low-level-tx-endpoints linked to this tx-array-carrier have configurable-tdd-pattern-supported = 'true'";
+ }
+
+ leaf crb-to-prb-grid-offset {
+ if-feature "feat:PRG-SIZE-SUPP-SE-21-WITH-ST6 or feat:PRG-SIZE-SUPP-SE-21-WITH-ST5";
+ type uint16 {
+ range 0..2199;
+ }
+ default 0;
+ description
+ "This parameter specifies the value of 'offsetToCarier' parameter as specified in the 3GPP Specification TS 38.331.
+ This value is the offset in frequency domain, between lowest subcarrier of common RB 0, which is the start of
+ carrier resource Block(CRB grid) and the lowest usable subcarrier on this array-carrier, which is (RE0 of PRB0),
+ in units of number of PRBs (using the SCS defined for associated array-carrier). This parameter shall be used with
+ 'prgSize' in Section Extension 21 by the O-RU to correctly derive Channel Information Based Beamforming weights.
+ Value of this parameter is not interpretted by the O-RU, if either 'prg-size-supp-se-21-with-st6-enabled'
+ or 'prg-size-supp-se-21-with-st5-enabled' parameter is not set to TRUE by the O-DU.";
+ }
+ }
+
+ 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.";
+ }
+
+ list odu-ids {
+ if-feature feat:SHARED-ORU-MULTI-ODU;
+ key odu-id;
+ description
+ "An optional list of o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a rx-array-carrier
+ associated with one or more particular odu-id(s).
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a single operator environment, where watchdog supervision is performed
+ on a per odu-id basis and supervision failure only results in a sub-set
+ of carriers beign de-activated.";
+
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ }
+
+ list sro-ids-and-odu-ids {
+ if-feature "feat:SHARED-ORU-MULTI-ODU and feat:SHARED-ORU-MULTI-OPERATOR";
+ key "odu-id sro-id";
+ description
+ "An optional list of sro and o-du identities associated with this list entry.
+ When present, indicates that the list entry corresponds to a rx-array-carrier
+ associated with one or more particular odu-id(s) operated by a particular sro-id.
+
+ This list is used to enable enhanced watchdog operation when operating
+ in a multi operator environment, where watchdog supervision is performed on
+ a per odu-id basis and supervision failure only results in a sub-set of
+ carriers beign de-activated.";
+ leaf odu-id {
+ type string;
+ description "an o-du identity ";
+ }
+ leaf sro-id {
+ type string;
+ description "an sro identity ";
+ }
+ }
+
+ uses rx-common-array-carrier-elements;
+
+ 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-carriers that have same frequency and bandwidth.
+ Note2: Unit is 1/1.2288e9 s. 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-carriers that have same frequency and bandwidth.";
+ }
+
+ leaf gain-correction {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ mandatory true;
+ description
+ "Gain correction of RF path linked with array element or array layers.
+ Common part of overall gain_correction.
+ gain_correction = common array-carrier gain-correction + eAxC gain correction.";
+ }
+
+ leaf n-ta-offset {
+ type uint32;
+ units Tc;
+ mandatory true;
+ description
+ "Value of configurable N-TA offset
+ units are Tc=~0.5ns=1/1.96608GHz";
+ }
+
+ leaf t-au-offset {
+ if-feature "feat:EXT-ANT-DELAY-CONTROL";
+ type uint32;
+ units Tc;
+ default 0;
+ description
+ "the time difference between the reception over the air and
+ the input of UL signal at the antenna connector of O-RU.
+ units are Tc=~0.5ns=1/1.96608GHz.
+ An O-RU with 'ext-ant-delay-capability' = 'PER-O-RU' shall reject any configuration
+ where different values of t-au-offset are configured on rx-array-carriers;
+ An O-RU with 'ext-ant-delay-capability' = 'PER-ARRAY' shall reject any configuration
+ where different values of t-au-offset are configured on rx-array-carriers associated with the same rx-array.";
+ }
+
+ leaf configurable-tdd-pattern {
+ when "not(/user-plane-configuration/low-level-rx-endpoints[name = string(/user-plane-configuration/low-level-rx-links[rx-array-carrier = current()/../name]/rx-array-carrier)]/configurable-tdd-pattern-supported = 'false')";
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ type leafref {
+ path "/user-plane-configuration/configurable-tdd-patterns/tdd-pattern-id";
+ }
+ description
+ "This parameter creates reference to configuration for TDD pattern applicable for particular rx-array-carrier.
+ The leaf may exist under rx-array-carrier only in case O-RU supports feature 'CONFIGURABLE-TDD-PATTERN-SUPPORTED'
+ AND all low-level-rx-endpoints linked to this rx-array-carrier have configurable-tdd-pattern-supported = 'true'";
+ }
+
+ leaf user-group-mode {
+ if-feature "feat:USER-GROUP-SELF-ASSEMBLY";
+ type enumeration {
+ enum NO-SELF-ASSEMBLY {
+ description "No user group self assembly";
+ }
+ enum SELF-ASSEMBLY-WITH-GROUP-ID {
+ description "User group self assembly with group id.";
+ }
+ enum SELF-ASSEMBLY-WITHOUT-GROUP-ID {
+ description "User group self assembly without group id.";
+ }
+ }
+ default NO-SELF-ASSEMBLY;
+ description
+ "Configuration of user group self assembly.";
+ }
+
+ leaf point-a-offset-to-absolute-frequency-center {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER";
+ type int32;
+ description
+ "An offset between center-of-channel-bandwidth and Point A.
+ If the value is not provided, then Point A coincides with RE#0 of PRB#0 indicated by offset-to-absolute-frequency-center.
+ The unit of this parameter is 1/2 of reference SCS, where reference SCS is 15 kHz for FR1 and 60 kHz for FR2.
+
+ Please refer to CUS specification clause 7.7.24 for more details.";
+ }
+
+ leaf continuity-block-size-configured {
+ if-feature "(feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ) and feat:CONTINUITY-BLOCK-SIZE";
+ type uint8;
+ description
+ "This parameter specified the O-DU configured value of continuity block size per rx-array-carrier.
+ The O-DU shall pick one of the values advertised by the O-RU in 'continuity-block-size-list'";
+ }
+
+ leaf port-reduced-dmrs-data-sending-enabled {
+ if-feature "feat:DMRS-BF-EQ or feat:DMRS-BF-NEQ";
+ type boolean;
+ description
+ "This parameter value if set to TRUE indicates O-DU request to O-RU for sending port reduced DMRS
+ sending from O-RU. If the flag is set to FALSE indicates O-RU shall not send port reduced DMRS
+ from O-RU to O-DU.";
+ }
+
+ }
+
+ list tx-arrays {
+ key "name";
+ config false;
+ description
+ "Structure describing TX array parameters";
+
+ uses parameters;
+
+ leaf min-gain {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ description
+ "Min gain of RF path linked with array element (maximum over elements of array) or array layers";
+ }
+
+ leaf max-gain {
+ type decimal64 {
+ fraction-digits 4;
+
+ }
+ units dB;
+ mandatory true;
+ description
+ "Max gain of RF path linked with array element (minimum over elements of array) or array layers";
+ }
+
+ leaf independent-power-budget {
+ type boolean;
+ mandatory true;
+ description
+ "If true then every element of array has own, power budget independent from power budget of other elements.
+ Else all elements of array that are at same row and column and have same polarisation share power budget";
+ }
+
+ list capabilities {
+ description
+ "List of capabilities related to this tx-array";
+ uses mcap:support-for-dl;
+
+ container supported-energy-saving-capabilities-dl {
+ description
+ "Network energy saving capabilities supported in DL path";
+
+ container trx-control-capability-info {
+ if-feature feat:TRX-CONTROL;
+ description
+ "A container with parameters for TRX-CONTROL capabilities supported by the O-RU.";
+ uses mcap:trx-control-capability-info;
+ }
+
+ container asm-capability-info {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description
+ "A container with parameters for advanced sleep mode capabilities supported by the O-RU.";
+ uses mcap:asm-capability-info;
+ }
+ }
+ }
+ container mplane-trx-control-txarr-capability-info {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ description
+ "A container with parameters for MPLANE-TRX-CONTROL feature supported by the O-RU.";
+ uses mplane-trx-control-supp-antenna-masks;
+ }
+ }
+
+ list rx-arrays {
+ key "name";
+ config false;
+ description "Structure describing RX array parameters";
+
+ uses parameters;
+ container gain-correction-range {
+ leaf max {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description "Array gain correction factor - maximum allowed value";
+ }
+ leaf min {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ units dB;
+ mandatory true;
+ description "Array gain correction factor - minimum allowed value";
+ }
+
+ description
+ "Array gain correction factor";
+ }
+
+ list capabilities {
+ description
+ "List of capabilities related to this rx-array";
+ uses mcap:support-for-ul;
+
+ container supported-energy-saving-capabilities-ul {
+ description
+ "Network energy saving capabilities supported in UL path";
+
+ container trx-control-capability-info {
+ if-feature feat:TRX-CONTROL;
+ description
+ "A container with parameters for TRX-CONTROL capabilities supported by the O-RU";
+ uses mcap:trx-control-capability-info;
+ }
+
+ container asm-capability-info {
+ if-feature feat:ADVANCED-SLEEP-MODE;
+ description
+ "A container with parameters for advanced sleep mode capabilities supported by the O-RU";
+ uses mcap:asm-capability-info;
+ }
+ }
+ }
+ container mplane-trx-control-rxarr-capability-info {
+ if-feature feat:MPLANE-TRX-CONTROL;
+ description
+ "A container with parameters for MPLANE-TRX-CONTROL feature supported by the O-RU.";
+
+ uses mplane-trx-control-supp-antenna-masks;
+ }
+ }
+
+ list relations {
+ key "entity";
+ config false;
+ description "Structure describing relations between array elements";
+
+ leaf entity {
+ type uint16;
+
+ description
+ "Relation entity. Used as a key for list of relations.";
+ }
+
+ container array1 {
+ uses array-choice;
+
+ description
+ "Defines name for first array";
+ }
+ container array2 {
+ uses array-choice;
+
+ description
+ "Defines name for second array";
+ }
+ list types {
+ key "relation-type";
+ description
+ "Defines relation type and pairs for array elements for given arrays";
+
+ leaf relation-type {
+ type enumeration {
+ enum SHARED {
+ description "SHARED";
+ }
+ enum COALOCATED {
+ description "COALOCATED";
+ }
+ }
+ description "Type of relation between array elements";
+ }
+ list pairs {
+ key "element-array1";
+ description
+ "defines related array elements";
+
+ leaf element-array1 {
+ type uint16;
+
+ description
+ "Tells about id of element from array1";
+ }
+ leaf element-array2 {
+ type uint16;
+
+ description
+ "Tells about id of element from array2";
+ }
+ }
+ }
+ }
+
+ container eaxc-id-group-configuration {
+ if-feature mcap:EAXC-ID-GROUP-SUPPORTED;
+ description
+ "This is the container for eAxC ID group configuration.";
+ leaf max-num-tx-eaxc-id-groups {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-tx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "eaxc-id-group-configuration";
+ }
+ leaf max-num-tx-eaxc-ids-per-group {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-tx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "max-num-tx-eaxc-ids-per-group";
+ }
+ leaf max-num-rx-eaxc-id-groups {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-rx-eaxc-id-groups";
+ require-instance false;
+ }
+ description "max-num-rx-eaxc-id-groups";
+ }
+ leaf max-num-rx-eaxc-ids-per-group {
+ type leafref {
+ path "/mcap:module-capability/mcap:ru-capabilities/mcap:eaxcid-grouping-capabilities/mcap:max-num-rx-eaxc-ids-per-group";
+ require-instance false;
+ }
+ description "max-num-rx-eaxc-ids-per-group";
+ }
+
+ list tx-eaxc-id-group {
+ must "count(../tx-eaxc-id-group) <= ../max-num-tx-eaxc-id-groups" {
+ error-message "too many tx-eaxcid-id groups";
+ }
+ key "representative-tx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs assigned to low-level-tx-endpoints.
+ Each group is a union of the 'member-tx-eaxc-id's and a 'representative-tx-eaxc-id'.
+ The low-level-tx-endpoint associated to 'representative-tx-eaxc-id' is able to
+ process the DL C-plane information for all the low-level-tx-endpoints associated
+ to 'member-tx-eaxc-id's.
+
+ Take Note: This list should only contain eAxC IDs assigned to a tx-endpoint.";
+
+
+ leaf representative-tx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-tx-eaxc-id'(s).";
+ }
+ leaf-list member-tx-eaxc-id {
+ type uint16;
+ must "count(../member-tx-eaxc-id) <= ../../max-num-tx-eaxc-ids-per-group" {
+ error-message "too many tx-eaxcid-id members";
+ }
+ must "current()!=../representative-tx-eaxc-id" {
+ error-message "the representative eaxcid does not need to be a list member";
+ }
+ ordered-by user;
+ description
+ "This is a list of member eAxC IDs, which together with the representative-tx-eaxc-id,
+ are assigned to low-level-tx-endpoints in the group.
+ This list is defined as 'ordered-by user', because the order of the eaxc-id list should be maintained,
+ and the parameters in the SE10 are applied to the eaxc-ids based on the order of eaxc-ids in the list
+ when the section extension conveys unique parameters (beamId/ueId) per eaxc-id.";
+ }
+ }
+
+ list rx-eaxc-id-group {
+ must "count(../rx-eaxc-id-group) <= ../max-num-rx-eaxc-id-groups" {
+ error-message "too many rx-eaxcid-id groups";
+ }
+ key "representative-rx-eaxc-id";
+ description
+ "This is a list of the groups of the eAxC IDs assigned to low-level-rx-endpoints.
+ Each group is a union of 'member-rx-eaxc-id's and a 'representative-rx-eaxc-id'.
+ The low-level-rx-endpoint associated to 'representative-rx-eaxc-id' is able to
+ process the UL C-plane information for all the low-level-rx-endpoints associated
+ to 'member-rx-eaxc-id's.
+
+ Take Note: This list should only contain eAxC IDs assigned to a rx-endpoint.";
+
+ leaf representative-rx-eaxc-id {
+ type uint16;
+ description
+ "This parameter contains eAxC_ID that populates content of C-Plane section
+ extension 10 to eAxC_IDs configured in the group as 'member-rx-eaxc-id'(s).";
+ }
+
+ leaf-list member-rx-eaxc-id {
+ type uint16;
+ must "count(../member-rx-eaxc-id) <= ../../max-num-rx-eaxc-ids-per-group" {
+ error-message "too many rx-eaxcid-id members";
+ }
+ must "current()!=../representative-rx-eaxc-id" {
+ error-message "the representative eaxc-id does not need to be a list member";
+ }
+ ordered-by user;
+ description
+ "This is a list of member eAxC IDs assigned to low-level-rx-endpoints in the group.
+ This list is defined as 'ordered-by user', because the order of the eaxc-id list should be maintained,
+ and the parameters in the SE10 are applied to the eaxc-ids based on the order of eaxc-ids in the list
+ when the section extension conveys unique parameters (beamId/ueId) per eaxc-id.";
+ }
+ }
+ }
+
+ list static-prach-configurations {
+ if-feature mcap:PRACH-STATIC-CONFIGURATION-SUPPORTED;
+ key static-prach-config-id;
+ description
+ "List of static PRACH configurations. An O-RU shall reject any configuration
+ modification which exceed the maximum permitted configurations supported by
+ the O-RU";
+
+ leaf static-prach-config-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in list of static PRACH configurations.";
+ }
+
+ uses static-prach-configuration;
+ }
+
+ grouping static-prach-configuration {
+ description
+ "Set of parameters related to static PRACH configuration";
+
+ leaf sfn-offset {
+ type uint32;
+
+ description
+ "This parameter is used for offsetting SFN value.
+ The SFN that results from the offset is used as the reference for the start of pattern periods.
+ If the value is not set, then pattern periods follow the reference set in a related rx-array-carrier.
+ The value is primarily used for cases in which pattern-period is not a power of 2.
+ Unit is in 10ms.";
+ }
+
+ leaf pattern-period {
+ type uint16 {
+ range 1..1024;
+ }
+ mandatory true;
+ description
+ "Period after which static PRACH patterns are repeated. Unit: number of frames.";
+ }
+
+ leaf guard-tone-low-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of REs occupied by the low guard tones.";
+ }
+
+ leaf num-prach-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of contiguous PRBs per data section description";
+ }
+
+ leaf guard-tone-high-re {
+ type uint32;
+ mandatory true;
+ description
+ "Number of REs occupied by the high guard tones.";
+ }
+
+ leaf sequence-duration {
+ type uint32 {
+ range 256..24576;
+ }
+ units Ts;
+ mandatory true;
+ description
+ "Duration of single PRACH Symbol. Refer to definition of PRACH Symbol in CUS specification clause 3.1.";
+ }
+
+ list prach-patterns {
+ key prach-pattern-id;
+ min-elements 1;
+ description
+ "Provides a PRACH pattern. Each record in the list represents a single PRACH occasion. Number of list entries cannot
+ exceed max-prach-patterns or extended-max-prach-patterns if EXTENDED-PRACH-CONFIGURATION is supported.";
+
+ leaf prach-pattern-id {
+ type uint32;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key for prach-pattern list.
+ NETCONF client shall limit its maximum value to 65535 when configuring
+ any O-RU that does not support the EXTENDED-PRACH-CONFIGURATION feature.";
+ }
+
+ leaf number-of-repetitions {
+ type uint8{
+ range 1..14;
+ }
+ mandatory true;
+ description
+ "This parameter defines number of PRACH PRACH Symbol repetitions in PRACH occasion,
+ to which the section control is applicable. Refer to definition of PRACH Symbol in CUS specification clause 3.1.";
+ }
+
+ leaf number-of-occasions {
+ type uint32;
+ mandatory true;
+ description
+ "This parameter informs how many consecutive PRACH occasions is described by the PRACH pattern.
+ NETCONF client shall limit its maximum value to 255 when configuring any O-RU that does not
+ support the EXTENDED-PRACH-CONFIGURATION feature.";
+ }
+
+ leaf re-offset {
+ type uint32;
+ mandatory true;
+ description
+ "Offset between the start of lowest-frequency RE of lowest-frequency PRB
+ and the start of lowest-frequency RE belonging to the PRACH occasion.
+ The re-offset is configured as number of PRACH REs.";
+ }
+
+ list occasion-parameters {
+ key occasion-id;
+ min-elements 1;
+ description
+ "This is list of cp-lengths, gp-lengths and beam-ids applicable
+ per each PRACH occasion in PRACH pattern.
+ Note: the number of records in this list MUST be equal
+ to value of parameter number-of-occasions.";
+
+ leaf occasion-id {
+ type uint32;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key in 'occasion-parameters' list.
+ The value is limited to 255 if EXTENDED-PRACH-CONFIGURATION is unsupported.";
+ }
+
+ leaf cp-length {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "Cyclic prefix length. See CUS-plane specification for detailed description.";
+ }
+
+ leaf gp-length {
+ type uint16;
+ units Ts;
+ description
+ "Guard period length.";
+ }
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "This parameter defines the beam pattern to be applied to the U-Plane data.
+ beamId = 0 means no beamforming operation will be performed.";
+ }
+ }
+
+ leaf frame-number {
+ type uint16{
+ range 0..1023;
+ }
+ mandatory true;
+ description
+ "This parameter is an index inside the pattern-length, such that
+ PRACH occasion is happening for SFN which fulfills following equation:
+ [SFN mod pattern-length = frame-id]";
+ }
+
+ leaf sub-frame-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of sub-frame of the PRACH occasion. Value is interpreted in the same way
+ as subframeId field in a section description of a C-Plane message.";
+ }
+
+ leaf time-offset {
+ type uint16;
+ units Ts;
+ mandatory true;
+ description
+ "This parameter defines the time-offset from the start of the sub-frame
+ to the start of the first Cyclic Prefix of PRACH pattern";
+ }
+ }
+ }
+
+ grouping static-srs-configuration {
+ description
+ "Set of parameters related to static PRACH configuration";
+
+ leaf pattern-period {
+ type uint16 {
+ range 1..1024;
+ }
+ mandatory true;
+ description
+ "Period after which static SRS patterns are repeated. Unit: number of frames.";
+ }
+
+ list srs-patterns {
+ key srs-pattern-id;
+ min-elements 1;
+ description
+ "Provides a SRS pattern. Each record in the list represents a single PRACH occasion. Number of list entries cannot exceed max-srs-patterns.";
+
+ leaf srs-pattern-id {
+ type uint16;
+ mandatory true;
+ description
+ "Supplementary parameter acting as key for srs-pattern list.";
+ }
+
+ leaf sub-frame-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of sub-frame of the Raw SRS occasion. Value is interpreted in the same way
+ as subframeId field in a section description of a C-Plane message.";
+ }
+
+ leaf slot-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of slot of the Raw SRS occasion. Value is interpreted in the same way
+ as slotId field in a section description of a C-Plane message.";
+ }
+
+ leaf start-symbol-id {
+ type uint16;
+ mandatory true;
+ description
+ "Identifier of first symbol of the Raw SRS occasion. Value is interpreted in the same way
+ as startSymbolId field in a section description of a C-Plane message.";
+ }
+
+ leaf beam-id {
+ type uint16 {
+ range "min .. 32767";
+ }
+ mandatory true;
+ description
+ "This parameter defines the beam pattern to be applied to the U-Plane data.
+ beamId = 0 means no beamforming operation will be performed.";
+ }
+
+ leaf num-symbol {
+ type uint16;
+ mandatory true;
+ description
+ "This parameter defines number of consecutive symbols covered by specific srs-pattern.
+ Single srs-pattern may address at least one symbol. However, possible optimisations
+ could allow for several (up to 14) symbols.";
+ }
+
+ leaf start-prbc {
+ type uint16 {
+ range 0..1023;
+ }
+ mandatory true;
+ description
+ "Identifier of first PRB of the Raw SRS occasion. Value is interpreted in the same way
+ as startPrbc field in a section description of a C-Plane message.";
+ }
+
+ leaf num-prbc {
+ type uint16;
+ mandatory true;
+ description
+ "Number of PRBs of the Raw SRS occasion. Value is interpreted in the same way
+ as numPrbc field in a section description of a C-Plane message.";
+ }
+ }
+ }
+
+ grouping configurable-tdd-pattern {
+ description
+ "Set of parameters related to configurable TDD pattern.
+ Note: configurable-tdd-pattern shall not be used in case the usage would collide with
+ deprecated 'lte-tdd-pattern'.";
+
+ list switching-points {
+ key switching-point-id;
+ description
+ "List of switching points within frame, related to configurable TDD pattern.
+ An O-RU shall reject any configuration modification which exceeds the maximum
+ number of switching-points supported by the O-RU";
+
+ leaf switching-point-id {
+ type uint16;
+ description
+ "Supplementary parameter acting as key for switching-points list.";
+ }
+
+ leaf direction {
+ type enumeration {
+ enum UL {
+ description "Uplink";
+ }
+ enum DL {
+ description "Downlink";
+ }
+ enum GP {
+ description "Guard period";
+ }
+ }
+ mandatory true;
+ description
+ "Parameter provides information regarding desired signal direction at the moment switching point occurs.";
+ }
+
+ leaf frame-offset {
+ type uint32;
+ mandatory true;
+ description
+ "Offset from DL air frame boundary transmitted at RF connector to the point in time that is characteristic to the operation on RF switches. Unit is 1/1.2288e9 s.";
+ }
+ }
+ }
+
+ list static-srs-configurations {
+ if-feature mcap:SRS-STATIC-CONFIGURATION-SUPPORTED;
+ key static-srs-config-id;
+ description
+ "List of static SRS configurations";
+
+ leaf static-srs-config-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in the list of static SRS configurations.";
+ }
+
+ uses static-srs-configuration;
+ }
+
+ list configurable-tdd-patterns {
+ if-feature mcap:CONFIGURABLE-TDD-PATTERN-SUPPORTED;
+ key tdd-pattern-id;
+ description
+ "List of configured TDD patterns";
+
+ leaf tdd-pattern-id {
+ type uint8;
+ description
+ "Supplementary parameter acting as key in the list of configured TDD patterns.";
+ }
+
+ uses configurable-tdd-pattern;
+ }
+
+ list endpoint-bf-profile-group {
+ if-feature feat:BF-DELAY-PROFILE;
+ key "bf-profile-id";
+ config false;
+ description
+ "An optional list of list(s) containing beamforming methods supported by the O-RU with the associated delay-profile-id
+ per each beamforming method list";
+ leaf bf-profile-id {
+ type uint16;
+ description
+ "Identifies the beamforming method list.";
+ }
+ leaf-list supported-bf-methods {
+ type beamforming-method-type;
+ min-elements 1;
+ description
+ "Beamforming methods can be supported simultaneously.";
+ }
+ leaf supported-delay-profile {
+ type leafref {
+ path "/or-dm:delay-management/or-dm:non-default-ru-delay-profile/or-dm:delay-profile-id";
+ require-instance false;
+ }
+ description
+ "The delay-profile-id associated with the supported beamforming method list.
+ If not configured or the value is set to 0, all delay parameters shall be equivalent to the default value.";
+ }
+ }
+ list se10-member-candidate-tx-lists {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ key "id";
+ config false;
+ description
+ "List of leaf-lists, where each leaf-list is a member-candidate list comprising of endpoints
+ which can be associated to one or more static-low-level-tx-endpoint(s).";
+ leaf id {
+ type uint8;
+ description
+ "Index into the list se10-member-candidate-tx-lists.";
+ }
+ leaf-list member-candidates {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-tx-endpoints/name";
+ require-instance false;
+ }
+ description
+ "Each leaf-list comprises one or more static-low-elevel-tx-endpoint(s). Endpoints in this list can
+ be representative endpoint or member endpoint.";
+ }
+ }
+ list se10-member-candidate-rx-lists {
+ if-feature feat:SE10-MEMBER-CANDIDATE-LIST;
+ key "id";
+ config false;
+ description
+ "List of leaf-lists, where each leaf-list is a member-candidate list comprising of endpoints
+ which can be associated to one or more static-low-level-rx-endpoint(s).";
+ leaf id {
+ type uint8;
+ description
+ "Index into the list se10-member-candidate-rx-lists.";
+ }
+ leaf-list member-candidates {
+ type leafref {
+ path "/user-plane-configuration/static-low-level-rx-endpoints/name";
+ require-instance false;
+ }
+ description
+ "Each leaf-list comprises one or more static-low-elevel-rx-endpoint(s). Endpoints in this list can
+ be representative endpoint or member endpoint.";
+ }
+ }
+ }
+
+ grouping tx-array-notification-group {
+ description
+ "Grouping for tx-array for notification";
+
+ list tx-array-carriers{
+ key name;
+ description "notification of state change for tx-array-carriers";
+
+ leaf name{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/name";
+ }
+ description
+ "name of tx-array-carriers is notified at state change";
+ }
+ leaf state{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/state";
+ }
+ description
+ "state of tx-array-carriers is notified at state change";
+ }
+ leaf availability-status{
+ type leafref{
+ path "/user-plane-configuration/tx-array-carriers/availability-status";
+ }
+ description
+ "availability-status of tx-array-carriers is notified at availability-status change";
+ }
+ }
+ }
+
+ grouping rx-array-notification-group {
+ description
+ "Grouping for rx-array for notification";
+
+ list rx-array-carriers{
+ key name;
+ description
+ "Notification used to inform about state change of rx-array-carriers";
+ leaf name{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/name";
+ }
+ description
+ "name of rx-array-carriers is notified at state change";
+ }
+ leaf state{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/state";
+ }
+ description
+ "state of rx-array-carriers is notified at state change";
+ }
+ leaf availability-status{
+ type leafref{
+ path "/user-plane-configuration/rx-array-carriers/availability-status";
+ }
+ description
+ "availability-status of rx-array-carriers is notified at availability-status change";
+ }
+ }
+ }
+
+ // top level container
+ container user-plane-configuration {
+ description "top level container for user plane configuration";
+
+ uses uplane-conf-group;
+ uses general-config;
+ uses array-config-group;
+ }
+
+ //notification statement
+ notification tx-array-carriers-state-change {
+ description
+ "Notification used to inform about state change of tx-array-carriers";
+ uses tx-array-notification-group;
+ }
+ notification rx-array-carriers-state-change {
+ description
+ "Notification used to inform about state change of tx-array-carriers";
+
+ uses rx-array-notification-group;
+ }
+
+ notification data-layer-control-wakeup-notification {
+ if-feature feat:MPLANE-DATA-LAYER-CONTROL;
+ description
+ "Notification used to inform about wake-up completion after M-Plane based data layer control sleep is terminated";
+ leaf-list energy-sharing-group {
+ type uint8;
+ description
+ "Notification for wake-up completion of underlying HW components corresponding to energy sharing group.
+ This value shall be specific values from the list of 'energy-sharing-group-id' inside static-low-level-[tr]x-endpoints.";
+ }
+ }
+ notification mplane-trx-control-ant-mask-update {
+ if-feature feat:MPLANE-TRX-CONTROL;
+
+ leaf array-name {
+ type union {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ }
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ }
+ }
+ description
+ "The array name for which antenna mask has been updated using
+ MPLANE-TRX-CONTROL feature.";
+ }
+ leaf array-type {
+ type enumeration {
+ enum TX-ARRAY {
+ description
+ "this array is of type TX array";
+ }
+ enum RX-ARRAY {
+ description
+ "this array is of type RX array";
+ }
+ }
+ description
+ "The type of array for which antenna mask has been updated using
+ MPLANE-TRX-CONTROL feature.";
+ }
+ leaf updated-antenna-mask {
+ type binary;
+ description
+ "The updated antenna mask value after processing M-Plane based TRX control command at the O-RU.
+ If mplane-supported-trx-control-masks list is not advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask shall be used for notification.
+ The parameter antenna-bitmask-index shall not be used for notification.";
+ }
+ leaf updated-antenna-mask-index {
+ type uint8;
+ description
+ "The parameter indicates updated antenna mask index value after processing M-Plane based TRX control command at the O-RU.
+ If mplane-supported-trx-control-masks list is advertised as part of capability for the referred [tr]x-array,
+ the parameter antenna-bitmask-index shall be used for notification to refer to the index of advertised mplane-supported-trx-control-masks.
+ The parameter antenna-bitmask shall not be used for notification.";
+ }
+ description
+ "M-Plane notification event to notify that the commanded mask has been activated via M-plane. This notification
+ is required to be sent for either tx-array or rx-array for which the antenna mask was
+ commanded to be changed by the O-DU.";
+ }
+}
--- /dev/null
+<users xmlns="urn:o-ran:user-mgmt:1.0">
+ <user>
+ <name>oranuser</name>
+ <enabled>true</enabled>
+ </user>
+ <user>
+ <name>sudo</name>
+ <enabled>true</enabled>
+ </user>
+ <user>
+ <name>smo</name>
+ <enabled>true</enabled>
+ </user>
+ <user>
+ <name>hybrid-odu</name>
+ <enabled>true</enabled>
+ </user>
+ <user>
+ <name>carrier</name>
+ <enabled>true</enabled>
+ </user>
+</users>
--- /dev/null
+module o-ran-usermgmt {
+ yang-version 1.1;
+ namespace "urn:o-ran:user-mgmt:1.0";
+ prefix "o-ran-usermgmt";
+
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control Model";
+ }
+
+ import o-ran-wg4-features {
+ prefix "feat";
+ }
+
+ import ietf-crypto-types {
+ prefix ct;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the user management model for the O-RAN Equipment.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+
+ 1) add SSH Public Key.";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 10.1.0
+
+ 1) clarify handling of User-Names.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+
+ 1) introduced SHARED-ORU-MULTI-OPERATOR feature.";
+
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+
+ revision "2021-12-01" {
+ description
+ "version 1.3.0
+
+ 1) typographical corrections in descriptions";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 1.2.0
+
+ 1) updated description for enabled leaf";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-07-03" {
+ description
+ "version 1.1.0
+
+ 1) change name leaf to type nacm:user-name-type
+ 2) added account-type to qualify when password is required ";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ revision "2019-02-04" {
+ description
+ "version 1.0.0
+
+ 1) imported model from xRAN
+ 2) changed namespace and reference from xran to o-ran";
+
+ reference "ORAN-WG4.M.0-v01.00";
+ }
+
+ 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.
+ 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.
+
+ When a password is received by a NETCONF server,
+ it should be securely stored in the O-RU's configuration datastore.
+ How to securely store the password in the datastore is implementation-specific
+ and out of scope of WG4 M-Plane specification.";
+ }
+
+ grouping user-list {
+ description "a user list grouping";
+ list user {
+ key "name";
+ description
+ "The list of local users configured on this device.";
+ leaf name {
+ type nacm:user-name-type;
+ description
+ "The user name string identifying this entry.
+
+ NOTE: o-ran-usermgmt:user-profile/user/name is
+ identical to nacm:nacm/groups/group/user-name
+ but the current schema is preserved for backwards
+ compatibility.";
+ }
+ leaf account-type {
+ type enumeration {
+ enum PASSWORD {
+ description "the user-name is for password based authentication";
+ }
+ enum CERTIFICATE {
+ description "the user-name is for certificate based authentication";
+ }
+ enum SSHPUBLICKEY {
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ description "the user-name is for public key based authentication";
+ }
+ }
+ default "PASSWORD";
+ description "the account type";
+ }
+
+ leaf password {
+ nacm:default-deny-all;
+ type password-type;
+ description
+ "The password for this entry.
+
+ This field is only valid when account-type is PASSWORD,
+ i.e., when account-type is NOT present or present and set to
+ PASSWORD.";
+ }
+
+ container ssh-public-key {
+ nacm:default-deny-all;
+ when "../account-type='SSHPUBLICKEY'";
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ uses ct:public-key-grouping;
+ description
+ "The SSH pubic key for this entry.
+
+ This field is valid only when account-type is SSHPUBLICKEY.";
+ }
+
+ leaf enabled {
+ type boolean;
+ description
+ "Indicates whether an account is enabled or disabled.
+
+ A NETCONF Server shall reject a configuration that attempts to
+ enable a Password account for an account where the password leaf
+ is not configured.
+
+ This validation statement is included in the YANG description and
+ not in a MUST statement to preserve backwards compatibility.";
+ }
+ leaf-list sro-id {
+ if-feature feat:SHARED-ORU-MULTI-OPERATOR;
+ type string;
+ description
+ "An optional list if Shared Resource Operator identities associated with the
+ user-account. Used to realize enhanced access privileges in a shared O-RU.
+ When an sro-id is configured in the O-RU, the O-RU shall
+ implement additional sro-id based NETCONF access control
+ as specified in O-RAN.WG4.MP.0-v10.00.
+ The O-RU does not further interpret the specific value of sro-id.";
+ }
+ }
+ }
+
+ container users {
+ must "user/enabled='true'" {
+ error-message "At least one account needs to be enabled.";
+ }
+ //TAKE NOTE - any configuration with zero enabled users is invalid.
+ //This will typically be the case when using a simulated NETCONF Server
+ //and so this constraint should be removed when operating in those scenarios
+
+ //The config data base of the O-RAN equipment should ensure that the user
+ //default account is enabled on factory restart
+
+ description "list of user accounts";
+ uses user-list;
+ }
+
+ rpc chg-password {
+ description "the RPC used to change a password";
+ nacm:default-deny-all;
+ 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;
+ description "change password operation is successful";
+ }
+ enum "Failed" {
+ value 2;
+ description "change password operation failed";
+ }
+ }
+ mandatory true;
+ description
+ "Successful or Failed";
+ }
+ leaf status-message {
+ type string;
+ description
+ "Gives a more detailed reason for success / failure";
+ }
+ }
+ }
+
+ rpc chg-ssh-public-key {
+ if-feature feat:CLIENT-AUTH-SSH-PUBLIC-KEY;
+ description "the RPC used to change SSH public key";
+ nacm:default-deny-all;
+ input {
+ container current-ssh-public-key {
+ uses ct:public-key-grouping;
+ description
+ "provide the current SSH public algorithm and key";
+ }
+ container new-ssh-public-key {
+ uses ct:public-key-grouping;
+ description
+ "provide a new SSH public algorithm and key";
+ }
+ container new-ssh-public-key-confirm {
+ uses ct:public-key-grouping;
+ description
+ "re-enter the new SSH public algorithm and key";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum "Successful" {
+ value 1;
+ description "change SSH public key operation is successful";
+ }
+ enum "Failed" {
+ value 2;
+ description "change SSH public key operation failed";
+ }
+ }
+ mandatory true;
+ description
+ "Successful or Failed";
+ }
+ leaf status-message {
+ type string;
+ description
+ "Gives a more detailed reason for success / failure";
+ }
+ }
+ }
+
+}
--- /dev/null
+module o-ran-ves-subscribed-notifications {
+ yang-version 1.1;
+ namespace "urn:o-ran:ves-sn:1.0";
+ prefix o-ran-vsn;
+
+ import ietf-subscribed-notifications {
+ prefix sn;
+ }
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines augmentations to ietf-subscribed-notifications to
+ enable support of configured notifications sent using VNF Event Stream
+ notifications.
+
+ Copyright 2020 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) initial version";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ // identity statements
+ identity o-ran-ves-connectionless {
+ base sn:transport;
+ description
+ "A transport type used to indicate that notifications should be sent using an
+ ONAP VES Notification using RESTful connectionless transport";
+ }
+
+ grouping event-collector {
+ description
+ "Provides a reusable description of an event-collector.";
+ leaf notification-recipient {
+ type inet:uri;
+ mandatory true;
+ description
+ "This URI specifies the address of the notification receiver
+ HTTPS endpoint. Additional path elements may be added as required by the
+ protocol, i. e. it configures the server root.
+ E.g. https://myserver.mydomain.com:8443/notifications.";
+ }
+ }
+
+ augment "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
+ when "(derived-from-or-self(../../sn:transport, 'o-ran-vsn:o-ran-ves-connectionless'))";
+ description
+ "This augmentation allows VES-specific receiver parameters to be
+ configured.";
+ uses event-collector;
+ }
+}
--- /dev/null
+module o-ran-wg4-features {
+ yang-version 1.1;
+ namespace "urn:o-ran:wg4feat:1.0";
+ prefix "o-ran-feat";
+
+
+ organization "O-RAN Alliance";
+
+ contact
+ "www.o-ran.org";
+
+ description
+ "This module defines the set of re-usable type definitions for WG4 specific
+ features.
+
+ Copyright 2024 the O-RAN 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 O-RAN Alliance nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2024-08-12" {
+ description
+ "version 16.0.0
+ new features:
+
+ 1) PRG-SIZE-SUPP-SE-21-WITH-ST6
+ 2) PRG-SIZE-SUPP-SE-21-WITH-ST5
+ 3) USER-GROUP-OPTIMIZATION
+ 4) BF-DELAY-PROFILE
+ 5) DMRS-BF-EQ
+ 6) DMRS-BF-NEQ
+ 7) RRM-MEAS-REPORTING
+ 8) USER-GROUP-SELF-ASSEMBLY
+ 9) UEID-PERSISTENCE
+ 10) CONTINUITY-BLOCK-SIZE
+ 11) SELECTED-BF-METHOD-CONFIGURATION
+ 12) DMRS-BF-NEQ-UNALTERED-FREQ-OFFSET
+ 13) DMRS-BF-NEQ-UNALTERED-TAE
+ 14) SE10-MEMBER-CANDIDATE-LIST
+ 15) MACSEC-BYPASS-POLICY
+ 16) SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION
+ 17) SE20-MULTI-SD-PUNC-PATTERN-SUPPORT
+ 18) CONFIGURABLE-VSWR-THRESHOLDS
+ 19) CLIENT-AUTH-SSH-PUBLIC-KEY
+ 20) POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER";
+
+ reference "ORAN-WG4.M.0-v16.00";
+ }
+
+ revision "2024-04-15" {
+ description
+ "version 15.0.0
+ new features:
+
+ 1) PRG-SIZE-SUPP-SE-21-WITH-ST6
+ 2) PRG-SIZE-SUPP-SE-21-WITH-ST5
+ 3) BF-DELAY-PROFILE
+ 4) USER-GROUP-OPTIMIZATION
+ 5) MULTIPLE-BEAMID-TABLES-SUPPORTED
+ 6) PER-PORT-PTP-CONFIG
+ 7) PER-PORT-SYNCE-CONFIG
+ 8) MPLANE-TRX-CONTROL
+ 9) PER-INT-TCP-MSS
+ 10) DEEP-HIBERNATE";
+
+ reference "ORAN-WG4.M.0-v15.00";
+ }
+
+ revision "2023-12-11" {
+ description
+ "version 14.0.0
+ new features:
+
+ 1) SE23-PRB-BLOCK-MODE-SUPPORT
+ 2) MPLANE-DATA-LAYER-CONTROL
+ 3) SHARED-CELL-STATS";
+
+ reference "ORAN-WG4.M.0-v14.00";
+ }
+
+ revision "2023-08-14" {
+ description
+ "version 13.0.0
+ new features:
+
+ 1) CALL-HOME-REACTIVATION-SUPPORTED
+ 2) SEQ-ID-CHECKING-CONFIGURABLE
+ 3) TRX-CONTROL
+ 4) ADVANCED-SLEEP-MODE";
+
+ reference "ORAN-WG4.M.0-v13.00";
+ }
+
+ revision "2023-04-10" {
+ description
+ "version 12.0.0
+ new features:
+
+ 1) EXTENDED-PRACH-CONFIGURATION
+ 2) NON-SCHEDULED-UEID
+ 3) SE11-WITH-CONTINUITY-BIT-SUPPORT
+ 4) UPLANE-MESSAGE-PROCESSING-LIMITS";
+
+ reference "ORAN-WG4.M.0-v12.00";
+ }
+
+ revision "2022-12-05" {
+ description
+ "version 11.0.0
+ new features:
+
+ 1) UPLANE-ONLY-DL-MODE
+ 2) SUPERVISION-WITH-SESSION-ID
+ 3) INTEGRITY-CHECK-AT-SW-DOWNLOAD
+ 4) ST4-SLOT-CONFIG-MSG-SUPPORT";
+
+ reference "ORAN-WG4.M.0-v11.00";
+ }
+
+
+ revision "2022-08-15" {
+ description
+ "version 10.0.0
+ new features:
+ 1) SHARED-ORU-MULTI-ODU
+ 2) SHARED-ORU-MULTI-OPERATOR";
+ reference "ORAN-WG4.M.0-v10.00";
+ }
+
+ revision "2021-12-01" {
+ description
+ "version 8.0.0
+ new features:
+ 1) Typographical corrections in descriptions
+ 2) Add new features:
+ BEAM-UPDATE-CONTENTION-CONTROL
+ MULTIPLE-SCS-IN-EAXC
+ ENHANCED-T-COMBINE
+ CHANNEL-INFORMATION-COMPRESSION
+ CHANNEL-INFORMATION-PRB-GROUP
+ MULTIPLE-TRANSPORT-SESSION-TYPE";
+ reference "ORAN-WG4.M.0-v08.00";
+ }
+
+ revision "2021-07-26" {
+ description
+ "version 7.0.0
+
+ new features:
+ 1) EXT-ANT-DELAY-CONTRO
+ 2) CPLANE-MESSAGE-PROCESSING-LIMITS";
+
+ reference "ORAN-WG4.M.0-v07.00";
+ }
+
+ revision "2021-03-22" {
+ description
+ "version 6.0.0
+
+ 1) Features added to handle updated transmission window control:
+ STATIC-TRANSMISSION-WINDOW-CONTROL
+ DYNAMIC-TRANSMISSION-WINDOW-CONTROL
+ UNIFORMLY-DISTRIBUTED-TRANSMISSION
+ ORDERED-TRANSMISSION
+ INDEPENDENT-TRANSMISSION-WINDOW-CONTROL
+ ";
+
+ reference "ORAN-WG4.M.0-v06.00";
+ }
+
+ revision "2020-12-10" {
+ description
+ "version 5.0.0
+
+ 1) initial version.";
+
+ reference "ORAN-WG4.M.0-v05.00";
+ }
+
+ feature NON-PERSISTENT-MPLANE {
+ description
+ "Indicates that the Radio Unit supports the optional
+ capability to improve the operation with a SMO using a non-
+ persistent NETCONF session.";
+ }
+
+ feature STATIC-TRANSMISSION-WINDOW-CONTROL {
+ description
+ "O-RU supports U-plane transmission window control (scheduled transmission
+ and optionally uniformly distributed transmission) configuration over M-plane";
+ }
+
+ feature DYNAMIC-TRANSMISSION-WINDOW-CONTROL {
+ description
+ "O-RU supports U-plane transmission window control (scheduled transmission
+ and optionally uniformly distributed transmission) configuration over C-plane";
+ }
+
+ feature UNIFORMLY-DISTRIBUTED-TRANSMISSION {
+ if-feature "STATIC-TRANSMISSION-WINDOW-CONTROL or DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ description
+ "O-RU supports transmission of UL U-plane messages distributed uniformly over transmission window.";
+ }
+
+ feature ORDERED-TRANSMISSION {
+ description
+ "O-RU supports ordered transmission";
+ }
+
+ feature INDEPENDENT-TRANSMISSION-WINDOW-CONTROL {
+ if-feature "STATIC-TRANSMISSION-WINDOW-CONTROL or DYNAMIC-TRANSMISSION-WINDOW-CONTROL";
+ description
+ "O-RU supports independent U-plane transmission window per endpoint.
+
+ If this feature is not supported then for all endpoints with transmission control enabled
+ (see u-plane-transmission-control/transmission-window-control) must be configured for transmission
+ window offsets and window sizes that coincide for each symbol.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is not supported then all endpoints with
+ transmission control enabled that handle the same carrier type and SCS must be configured
+ (via M-plane or C-plane) with parameter values resulting in transmission windows that coincide
+ between the endpoints. That is, for every symbol N, the effective transmission window for symbol N
+ must be shared (start at the same time and end at the same time) by all the endpoints handling
+ same carrier type and SCS. This restriction applies only to endpoints that have transmission
+ control enabled.
+
+ If INDEPENDENT-TRANSMISSION-WINDOW-CONTROL feature is supported then restriction described
+ above does not apply and a different transmission window (window offset and window size)
+ can be used for every endpoint capable of transmission window control.";
+ }
+
+ feature EXT-ANT-DELAY-CONTROL {
+ description
+ "This feature indicates that the O-RU supports external antenna delay control";
+ }
+
+ feature CPLANE-MESSAGE-PROCESSING-LIMITS {
+ description
+ "Feature to indicate O-RU limitation of C-Plane message processing. Refer CUS-Plane specification
+ section 'O-RU C-Plane message limits' for more details on this feature.";
+ }
+
+ feature CHANNEL-INFORMATION-COMPRESSION {
+ description
+ "This feature indicates that the O-RU supports channel information compression.";
+ }
+
+ feature CHANNEL-INFORMATION-PRB-GROUP {
+ description
+ "Feature to indicate O-RU supports receiving and processing channel
+ information (e.g., ST6) with PRB group size greater than one PRB";
+ }
+
+ feature BEAM-UPDATE-CONTENTION-CONTROL {
+ description
+ "Feature to indicate O-RU requirements for beam weight update for a given beamId, to avoid beam update contentions.
+ Refer CUS-Plane specification section 'Weight-based dynamic beamforming' for more details on this feature.";
+ }
+
+ feature MULTIPLE-SCS-IN-EAXC {
+ description
+ "Presence of feature indicates that FHM supports combining for multiple SCS
+ or multiple c-plane-types/frameStructure in a single eAxC-id in UL direction.";
+ }
+
+ feature MULTIPLE-TRANSPORT-SESSION-TYPE {
+ description
+ "Feature to indicate O-RU supports to be configured with multiple transport-session-type
+ (Ethernet, ALIASMAC, UDP/IP)";
+ }
+
+ feature ENHANCED-T-COMBINE {
+ description
+ "Presence of feature indicates that FHM/Cascade O-RU can support t-combine-net and tx-duration";
+ }
+
+ feature SHARED-ORU-MULTI-OPERATOR {
+ description
+ "Feature to indicate the O-RU supports shared operation with one or more shared
+ resource operators (i.e., multiple MNOs) and implements enhanced NACM privileges per shared
+ resource operator.
+
+ Note, there is no linkage or dependency between the SHARED-CELL feature and the SHARED-ORU feature.";
+ }
+
+ feature SHARED-ORU-MULTI-ODU {
+ description
+ "Feature to indicate the O-RU supports independent supervision qualified based on odu-id, where
+ loss of supervision triggers selective carrier deactivation of carriers associated with odu-id.";
+ }
+
+ feature INTEGRITY-CHECK-AT-SW-DOWNLOAD {
+ description "Feature indicates that radio unit support performing integrity check at software download";
+ }
+
+ feature SUPERVISION-WITH-SESSION-ID {
+ description
+ "O-RUs supporting this feature reuse the session-id generated for each NETCONF
+ session in supervision-notification. The session-id is defined in RFC 6241.
+ For these O-RUs, the O-RU controller participating in the NETCONF supervision
+ procedure can subscribe to supervision-notification notification events,
+ filtering for the supervision-notification/session-id matching
+ session-id in the Hello Message received from NETCONF Server earlier.";
+ }
+
+ feature UPLANE-ONLY-DL-MODE {
+ description
+ "Presence of feature indicates that O-RU supports U-Plane-only DL mode.";
+ }
+
+ feature ST4-SLOT-CONFIG-MSG-SUPPORT {
+ description
+ "Feature to indicate O-RU support for Section Type 4 slot configuration message";
+ }
+ feature NON-SCHEDULED-UEID {
+ description
+ "Feature to indicate that O-RU supports 'non-scheduled-ueid' to indicate the ports in the section which are not scheduled for a given eAxcid";
+ }
+
+ feature EXTENDED-PRACH-CONFIGURATION {
+ description
+ "Presence of the feature indicates that O-RU supports extended number of PRACH patterns and occasions
+ provided by means of static PRACH.";
+ }
+
+ feature SE11-WITH-CONTINUITY-BIT-SUPPORT {
+ description
+ "Feature to indicate O-RU support for handling 'continuity' bit information in Section Extension 11";
+ }
+
+ feature UPLANE-MESSAGE-PROCESSING-LIMITS {
+ description
+ "Feature to indicate O-RU limitation of U-Plane message processing. Refer M-Plane specification
+ clause 15.10 for more details on this feature.";
+ }
+
+ feature CALL-HOME-REACTIVATION-SUPPORTED {
+ description
+ "Presence of the feature indicates that O-RU supports re-activation of timed out call home flows.";
+ }
+
+ feature SEQ-ID-CHECKING-CONFIGURABLE {
+ description
+ "Feature to indicate O-RU supports configuration of sequence number checking functionality.";
+ }
+
+ feature TRX-CONTROL {
+ description
+ "Feature to indicate O-RU support for handling RF channel reconfiguration by TRX Control.";
+ }
+
+ feature ADVANCED-SLEEP-MODE {
+ description
+ "Feature to indicate O-RU support for handling Advanced Sleep Modes.";
+ }
+
+ feature SE23-PRB-BLOCK-MODE-SUPPORT {
+ description
+ "Presence of the feature indicates that O-RU supports PRB-BLOCK mode of SE-23 as defined in CUS-Plane
+ specification Clause 7.7.23.1.";
+ }
+
+ feature MPLANE-DATA-LAYER-CONTROL {
+ description
+ "Feature to indicate O-RU support for M-Plane based data layer control energy saving feature.";
+ }
+
+ feature SHARED-CELL-STATS {
+ description
+ "Feature to indicate FHM/Cascade O-RU support for shared-cell-stats.";
+ }
+
+ feature PER-PORT-PTP-CONFIG {
+ description
+ "This feature indicates that the equipment supports per-port PTP configuration functionality";
+ }
+
+ feature PER-PORT-SYNCE-CONFIG {
+ description
+ "This feature indicates that the equipment supports per-port SYNCE configuration functionality";
+ }
+
+ feature PER-INT-TCP-MSS {
+ description
+ "This feature indicates that the RU supports a per-interfacece MSS
+ configuration for TCP.";
+ }
+
+ feature MULTIPLE-BEAMID-TABLES-SUPPORTED {
+ description
+ "Feature to indicate O-RU support for multiple beamId tables.";
+ }
+
+ feature MPLANE-TRX-CONTROL {
+ description
+ "Feature to indicate O-RU support for M-plane based TRX control for Network Energy Saving.";
+ }
+
+ feature DEEP-HIBERNATE {
+ description
+ "Feature to indicate O-RU support for M-Plane based deep-hibernate energy saving feature.";
+ }
+
+ feature PRG-SIZE-SUPP-SE-21-WITH-ST6 {
+ description
+ "Feature to indicate O-RU support for receiving prgSize information when Section Extension 21 is
+ sent with Section Type 6.";
+ }
+
+ feature PRG-SIZE-SUPP-SE-21-WITH-ST5 {
+ description
+ "Feature to indicate O-RU support for receiving prgSize information when Section Extension 21 is
+ sent with Section Type 5.";
+ }
+
+ feature USER-GROUP-OPTIMIZATION {
+ description
+ "Feature to indicate O-DU requirement to send all layers for a given user group i.e., UEs with same
+ time-frequency allocation using single C-Plane section description.";
+ }
+
+ feature BF-DELAY-PROFILE {
+ description
+ "Feature to indicate O-RU support for beamforming list and delay profiles(s) per endpoint.";
+ }
+
+ feature DMRS-BF-EQ {
+ description
+ "DMRS beamforming with equalization supported. See CUS-plane clause 12.6";
+ }
+
+ feature DMRS-BF-NEQ {
+ description
+ "DMRS beamforming without equalization supported. See CUS-plane clause 12.6";
+ }
+
+ feature RRM-MEAS-REPORTING {
+ description
+ "Reporting of RRM measurmenets supported. See CUS-plane clause 12.6.1.6";
+ }
+
+ feature USER-GROUP-SELF-ASSEMBLY {
+ description
+ "Feature to indicate user group self assembly. See CUS-Plane clause 7.7.24.7.";
+ }
+
+ feature UEID-PERSISTENCE {
+ description
+ "Feature to indicate if ueId persistance over multiple slots is supported. See CUS-Plane clause 7.7.24.10.";
+ }
+
+ feature CONTINUITY-BLOCK-SIZE {
+ description
+ "The O-RUs capability for reporting one or more values of continuity block sizes. See CUS-plane clause 12.6.1.2.1";
+ }
+
+ feature SELECTED-BF-METHOD-CONFIGURATION {
+ description
+ "Feature to indicate O-RU support for configuration of a subset of beamforming methods from an
+ endpoint-bf-profile-group that shall be used by a specific endpoint.";
+ }
+
+ feature DMRS-BF-NEQ-UNALTERED-FREQ-OFFSET {
+ description
+ "Feature to indicate that DMRS-BF-NEQ beamforming performed by the O-RU does not change frequency offset,
+ hence it can be measured by the O-DU.";
+ }
+
+ feature DMRS-BF-NEQ-UNALTERED-TAE {
+ description
+ "Feature to indicate that DMRS-BF-NEQ beamforming performed by the O-RU does not change TAE,
+ hence TAE can be measured by the O-DU. Refer CUS specification clause 9.2.2.1 for details.";
+ }
+
+ feature SE10-MEMBER-CANDIDATE-LIST {
+ description
+ "Reporting of member-list of endpoints for SE-10 supporting endpoint. See CUS-plane clause 7.7.10.1";
+ }
+
+ feature MACSEC-BYPASS-POLICY {
+ description
+ "O-RU supports MACsec bypass policy";
+ }
+
+ feature SE27-ODU-CONTROLLED-DIMENSIONALITY-REDUCTION {
+ description
+ "Presence of the feature indicates that O-RU supports O-DU controlled dimensionality reduction using SE27 as defined in CUS-Plane
+ specification Clause 7.7.27.";
+ }
+
+ feature SE20-MULTI-SD-PUNC-PATTERN-SUPPORT {
+ description
+ "Feature to indicate O-RU support for handling multiple section description puncturing pattern in
+ Section Extension 20 per endpoint.";
+ }
+
+ feature CONFIGURABLE-VSWR-THRESHOLDS {
+ description
+ "Feature to indicate O-RU support for configurable VSWR thresholds.";
+ }
+
+ feature CLIENT-AUTH-SSH-PUBLIC-KEY {
+ description
+ "O-RU supports an optional feature to authenticate SSH client via SSHPUBLICKEY method.";
+ }
+
+ feature POINT-A-OFFSET-TO-ABSOLUTE-FREQUENCY-CENTER {
+ description
+ "Feature to indicate if leaf rx-array-carriers/point-a-offset-to-absolute-frequency-center is supported. See CUS-Plane clause 7.7.24.1.";
+ }
+}
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+import requests
+import threading
+
+from core.dict_factory import DictFactory, BaseTemplate
+from core.extension import Extension
+from core.config import Config
+from core.netconf import Netconf, Datastore
+from util.crypto import CryptoUtils
+from util.threading import sa_sleep
+from util.logging import get_pynts_logger
+
+logger = get_pynts_logger("o-ru-mplane")
+
+ODL_CALLHOME_ALLOW_DEVICES_URL="/rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices/device="
+ODL_ADD_TRUSTED_CERT_URL="/rests/operations/netconf-keystore:add-trusted-certificate"
+ODL_RM_TRUSTED_CERT_URL="/rests/operations/netconf-keystore:remove-trusted-certificate"
+HTTP_YANG_JSON_HEADERS = {
+ 'content-type': 'application/yang-data+json',
+ 'accept': 'application/yang-data+json'
+ }
+HTTP_JSON_HEADERS = {
+ 'content-type': 'application/json',
+ 'accept': 'application/json'
+ }
+
+class Main(Extension):
+ def init(self) -> None:
+ self.netconf = Netconf()
+ self.config = Config()
+ self.crypto_util = CryptoUtils()
+
+ DictFactory.add_template("o-ran-certificates", OranCertificatesTemplate)
+ DictFactory.add_template("odl-netconf-callhome-server-ssh", OdlNetconfCallhomeServerSshTemplate)
+ DictFactory.add_template("odl-netconf-callhome-server-tls", OdlNetconfCallhomeServerTlsTemplate)
+ DictFactory.add_template("odl-netconf-callhome-trusted-cert", OdlNetconfCallhomeTrustedCertificateTemplate)
+ DictFactory.add_template("odl-netconf-callhome-trusted-cert-remove", OdlNetconfCallhomeRemoveTrustedCertificateTemplate)
+
+
+ def startup(self) -> None:
+ self.update_o_ran_certificates()
+ self.start_odl_allow_thread()
+ logger.info("o-ru-mplane extension loaded")
+
+ def update_o_ran_certificates(self) -> None:
+ o_ran_certificates_template = DictFactory.get_template("o-ran-certificates")
+ o_ran_certificates_template.update_key(["o-ran-certificates", "certificate-parameters", "cert-maps", "cert-to-name", 0, "fingerprint"], self.crypto_util.get_certificate_fingerprint(self.crypto_util.root_odu_ca_cert))
+
+ self.netconf.set_data(Datastore.RUNNING, "", o_ran_certificates_template.data)
+ self.netconf.set_data(Datastore.OPERATIONAL, "", o_ran_certificates_template.data)
+
+
+ def start_odl_allow_thread(self):
+ request_thread = threading.Thread(target=self.send_odl_callhome_allow_tls)
+ request_thread.daemon = True # Set as daemon so it exits when the main program exits
+ request_thread.start()
+
+ def send_odl_callhome_allow_tls(self) -> None:
+ odl_trusted_cert_template = DictFactory.get_template("odl-netconf-callhome-trusted-cert")
+ odl_trusted_cert_template.update_key(["input", "trusted-certificate", 0, "name"], self.config.hostname)
+ odl_trusted_cert_template.update_key(["input", "trusted-certificate", 0, "certificate"], self.crypto_util.get_certificate_base64_encoding_no_markers(is_smo=True))
+
+ odl_trusted_cert_template_remove = DictFactory.get_template("odl-netconf-callhome-trusted-cert-remove")
+ odl_trusted_cert_template_remove.update_key(["input","name", 0], self.config.hostname)
+
+ allow_tls_template = DictFactory.get_template("odl-netconf-callhome-server-tls")
+ allow_tls_template.update_key(["odl-netconf-callhome-server:device", "unique-id"], self.config.hostname)
+ allow_tls_template.update_key(["odl-netconf-callhome-server:device", "tls-client-params", "certificate-id"], self.config.hostname)
+
+ success1 = False # Flag to track the success of the first request
+ success2 = False # Flag to track the success of the second request
+ while not (success1 and success2):
+ if not success1:
+ try:
+ # Trying to delete first the cert
+ url = self.config.sdnr_restconf_url + ODL_RM_TRUSTED_CERT_URL
+ payload = odl_trusted_cert_template_remove.data
+ logger.debug(f"sending HTTP POST to {url} with payload {payload}")
+ response = requests.post(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=payload, headers=HTTP_YANG_JSON_HEADERS, verify=False)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ else:
+ logger.error(f"HTTP POST request failed to {url} with payload {payload} with status_code={response.status_code}")
+ except requests.RequestException as e:
+ logger.error(f"Error occurred in first request: {e}. Retrying in 10 seconds...")
+
+ try:
+ url = self.config.sdnr_restconf_url + ODL_ADD_TRUSTED_CERT_URL
+ payload = odl_trusted_cert_template.data
+ logger.debug(f"sending HTTP POST to {url} with payload {payload}")
+ response = requests.post(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=payload, headers=HTTP_YANG_JSON_HEADERS, verify=False)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ success1 = True
+ else:
+ logger.error(f"HTTP POST request failed to {url} with payload {payload} with status_code={response.status_code}")
+ except requests.RequestException as e:
+ logger.error(f"Error occurred in first request: {e}. Retrying in 10 seconds...")
+
+ if not success2:
+ try:
+ url = self.config.sdnr_restconf_url + ODL_CALLHOME_ALLOW_DEVICES_URL + self.config.hostname
+ payload = allow_tls_template.data
+ logger.debug(f"sending HTTP PUT to {url} with payload {payload}")
+ response = requests.put(url, auth=(self.config.sdnr_username, self.config.sdnr_password), json=payload, headers=HTTP_YANG_JSON_HEADERS, verify=False)
+ if response.status_code >= 200 and response.status_code < 300:
+ logger.debug(f"HTTP response to {url} succeded with code {response.status_code}")
+ success2 = True
+ else:
+ logger.error(f"HTTP PUT request failed to {url} with payload {payload} with status_code={response.status_code}")
+ except requests.RequestException as e:
+ logger.error(f"Error occurred in second request: {e}. Retrying in 10 seconds...")
+
+ # Wait 10 seconds before retrying
+ if not (success1 and success2):
+ sa_sleep(10)
+
+
+class OranCertificatesTemplate(BaseTemplate):
+ """A dictionary template for netconf-server-parameters objects."""
+ def create_dict(self):
+ config = Config()
+ return { "o-ran-certificates": {
+ "certificate-parameters": {
+ "cert-maps": {
+ "cert-to-name": [
+ {
+ "id": 1,
+ "fingerprint": "FINGERPRINT_TO_BE_REPLACED",
+ "map-type": "ietf-x509-cert-to-name:san-rfc822-name"
+ }
+ ]
+ }
+ }
+ }
+ }
+
+class OdlNetconfCallhomeServerSshTemplate(BaseTemplate):
+ """A dictionary template for odl-netconf-callhome-server-ssh objects."""
+ def create_dict(self):
+ return {
+ "odl-netconf-callhome-server:device": {
+ "unique-id": "TO_BE_REPLACED_HOSTNAME",
+ "ssh-client-params": {
+ "credentials": {
+ "username": "TO_BE_REPLACED_USERNAME",
+ "passwords": [ ]
+ },
+ "host-key": "TO_BE_REPLACED_SSHKEY"
+ }
+ }
+ }
+
+class OdlNetconfCallhomeServerTlsTemplate(BaseTemplate):
+ """A dictionary template for odl-netconf-callhome-server-tls objects."""
+ def create_dict(self):
+ return {
+ "odl-netconf-callhome-server:device": {
+ "unique-id": "TO_BE_REPLACED_HOSTNAME",
+ "tls-client-params": {
+ "key-id": "ODL_private_key_0", # hardcoded ODL key here
+ "certificate-id": "TO_BE_REPLACED_HOSTNAME"
+ }
+ }
+ }
+
+
+class OdlNetconfCallhomeTrustedCertificateTemplate(BaseTemplate):
+ """A dictionary template for odl-netconf-callhome-trusted-cert objects."""
+ def create_dict(self):
+ return {
+ "input": {
+ "trusted-certificate": [
+ {
+ "name": "TO_BE_REPLACED_HOSTNAME",
+ "certificate": "TO_BE_REPLACED_SERVER_CERT"
+ }
+ ]
+ }
+ }
+
+class OdlNetconfCallhomeRemoveTrustedCertificateTemplate(BaseTemplate):
+ """A dictionary template for removing odl-netconf-callhome-trusted-cert objects."""
+ def create_dict(self):
+ return {
+ "input": {
+ "name": ["TO_BE_REPLACED_HOSTNAME"]
+ }
+ }
--- /dev/null
+# /*************************************************************************
+# *
+# * Copyright 2025 highstreet technologies and others
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# ***************************************************************************/
+
+# By default there is no requirements added here.
+# Add the requirements you need to this file.